@Override public void setMessageObject(MessageObject messageObject) { boolean dataChanged = currentMessageObject == messageObject && isUserDataChanged(); if (currentMessageObject != messageObject || dataChanged) { if (AndroidUtilities.isTablet()) { backgroundWidth = Math.min( AndroidUtilities.getMinTabletSide() - AndroidUtilities.dp( isChat && messageObject.messageOwner.from_id > 0 ? 102 : 50), AndroidUtilities.dp(300)); } else { backgroundWidth = Math.min( AndroidUtilities.displaySize.x - AndroidUtilities.dp( isChat && messageObject.messageOwner.from_id > 0 ? 102 : 50), AndroidUtilities.dp(300)); } if (messageObject.isOutOwner()) { seekBar.type = 0; radialProgress.setProgressColor(theme.ChatMusicCell_radialProgress_color); } else { seekBar.type = 1; radialProgress.setProgressColor(theme.ChatMusicCell_radialProgress_color_2); } int maxWidth = backgroundWidth - AndroidUtilities.dp(86); CharSequence stringFinal = TextUtils.ellipsize( messageObject.getMusicTitle().replace("\n", " "), titlePaint, maxWidth, TextUtils.TruncateAt.END); titleLayout = new StaticLayout( stringFinal, titlePaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); if (titleLayout.getLineCount() > 0) { titleX = (int) Math.ceil(titleLayout.getLineLeft(0)); } stringFinal = TextUtils.ellipsize( messageObject.getMusicAuthor().replace("\n", " "), authorPaint, maxWidth, TextUtils.TruncateAt.END); authorLayout = new StaticLayout( stringFinal, authorPaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); if (authorLayout.getLineCount() > 0) { authorX = (int) Math.ceil(authorLayout.getLineLeft(0)); } super.setMessageObject(messageObject); } updateButtonState(dataChanged); }
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (currentMessageObject == null) { return; } if (currentMessageObject.isOutOwner()) { timePaint.setColor(theme.ChatMusicCell_timePaint_color); } else { timePaint.setColor(theme.ChatMusicCell_timePaint_color_2); } radialProgress.draw(canvas); canvas.save(); canvas.translate(timeX + titleX, AndroidUtilities.dp(12) + namesOffset); titleLayout.draw(canvas); canvas.restore(); canvas.save(); if (MediaController.getInstance().isPlayingAudio(currentMessageObject)) { canvas.translate(seekBarX, seekBarY); seekBar.draw(canvas); } else { canvas.translate(timeX + authorX, AndroidUtilities.dp(32) + namesOffset); authorLayout.draw(canvas); } canvas.restore(); canvas.save(); canvas.translate(timeX, AndroidUtilities.dp(52) + namesOffset); timeLayout.draw(canvas); canvas.restore(); }
@Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); if (currentMessageObject.isOutOwner()) { seekBarX = layoutWidth - backgroundWidth + AndroidUtilities.dp(52); buttonX = layoutWidth - backgroundWidth + AndroidUtilities.dp(13); timeX = layoutWidth - backgroundWidth + AndroidUtilities.dp(63); } else { if (isChat && currentMessageObject.messageOwner.from_id > 0) { seekBarX = AndroidUtilities.dp(113); buttonX = AndroidUtilities.dp(74); timeX = AndroidUtilities.dp(124); } else { seekBarX = AndroidUtilities.dp(61); buttonX = AndroidUtilities.dp(22); timeX = AndroidUtilities.dp(72); } } seekBar.width = backgroundWidth - AndroidUtilities.dp(67); seekBar.height = AndroidUtilities.dp(30); seekBarY = AndroidUtilities.dp(26) + namesOffset; buttonY = AndroidUtilities.dp(13) + namesOffset; radialProgress.setProgressRect( buttonX, buttonY, buttonX + AndroidUtilities.dp(40), buttonY + AndroidUtilities.dp(40)); updateProgress(); }
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (currentMessageObject == null) { return; } avatarImage.draw(canvas); if (nameLayout != null) { canvas.save(); canvas.translate( avatarImage.getImageX() + avatarImage.getImageWidth() + AndroidUtilities.dp(9), AndroidUtilities.dp(10) + namesOffset); namePaint.setColor( AvatarDrawable.getColorForId(currentMessageObject.messageOwner.media.user_id)); nameLayout.draw(canvas); canvas.restore(); } if (phoneLayout != null) { canvas.save(); canvas.translate( avatarImage.getImageX() + avatarImage.getImageWidth() + AndroidUtilities.dp(9), AndroidUtilities.dp(31) + namesOffset); phoneLayout.draw(canvas); canvas.restore(); } if (drawAddButton) { Drawable addContactDrawable; if (currentMessageObject.isOutOwner()) { addContactDrawable = addContactDrawableOut; } else { addContactDrawable = addContactDrawableIn; } setDrawableBounds( addContactDrawable, avatarImage.getImageX() + namesWidth + AndroidUtilities.dp(78), AndroidUtilities.dp(13) + namesOffset); addContactDrawable.draw(canvas); } }
@Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); if (currentMessageObject == null) { return; } int x; if (currentMessageObject.isOutOwner()) { x = layoutWidth - backgroundWidth + AndroidUtilities.dp(8); } else { if (isChat && currentMessageObject.messageOwner.from_id > 0) { x = AndroidUtilities.dp(69); } else { x = AndroidUtilities.dp(16); } } avatarImage.setImageCoords( x, AndroidUtilities.dp(9) + namesOffset, AndroidUtilities.dp(42), AndroidUtilities.dp(42)); }
@Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); MediaController.getInstance().removeLoadingFileObserver(this); }
@Override protected void onAttachedToWindow() { super.onAttachedToWindow(); updateButtonState(false); }
@Override public void setMessageObject(MessageObject messageObject) { if (currentMessageObject != messageObject || isUserDataChanged()) { int uid = messageObject.messageOwner.media.user_id; contactUser = MessagesController.getInstance().getUser(uid); drawAddButton = contactUser != null && uid != UserConfig.getClientUserId() && ContactsController.getInstance().contactsDict.get(uid) == null; int maxWidth; if (AndroidUtilities.isTablet()) { maxWidth = (int) (AndroidUtilities.getMinTabletSide() * 0.7f); } else { maxWidth = (int) (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) * 0.7f); } maxWidth -= AndroidUtilities.dp(58 + (drawAddButton ? 42 : 0)); if (contactUser != null) { if (contactUser.photo != null) { currentPhoto = contactUser.photo.photo_small; } else { currentPhoto = null; } avatarDrawable.setInfo(contactUser); } else { currentPhoto = null; avatarDrawable.setInfo(uid, null, null, false); } avatarImage.setImage(currentPhoto, "50_50", avatarDrawable, null, false); String currentNameString = ContactsController.formatName( messageObject.messageOwner.media.first_name, messageObject.messageOwner.media.last_name); int nameWidth = Math.min((int) Math.ceil(namePaint.measureText(currentNameString)), maxWidth); CharSequence stringFinal = TextUtils.ellipsize( currentNameString.replace("\n", " "), namePaint, nameWidth, TextUtils.TruncateAt.END); nameLayout = new StaticLayout( stringFinal, namePaint, nameWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); if (nameLayout.getLineCount() > 0) { nameWidth = (int) Math.ceil(nameLayout.getLineWidth(0)); } else { nameWidth = 0; } String phone = messageObject.messageOwner.media.phone_number; if (phone != null && phone.length() != 0) { if (!phone.startsWith("+")) { phone = "+" + phone; } phone = PhoneFormat.getInstance().format(phone); } else { phone = LocaleController.getString("NumberUnknown", R.string.NumberUnknown); } int phoneWidth = Math.min((int) Math.ceil(phonePaint.measureText(phone)), maxWidth); stringFinal = TextUtils.ellipsize( phone.replace("\n", " "), phonePaint, phoneWidth, TextUtils.TruncateAt.END); phoneLayout = new StaticLayout( stringFinal, phonePaint, phoneWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); if (phoneLayout.getLineCount() > 0) { phoneWidth = (int) Math.ceil(phoneLayout.getLineWidth(0)); } else { phoneWidth = 0; } namesWidth = Math.max(nameWidth, phoneWidth); backgroundWidth = AndroidUtilities.dp(77 + (drawAddButton ? 42 : 0)) + namesWidth; super.setMessageObject(messageObject); } }