Ejemplo n.º 1
1
  @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);
  }
Ejemplo n.º 2
0
  @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();
  }
Ejemplo n.º 3
0
  @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();
  }
Ejemplo n.º 4
0
  @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);
    }
  }
Ejemplo n.º 5
0
  @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));
  }
Ejemplo n.º 6
0
 @Override
 protected void onDetachedFromWindow() {
   super.onDetachedFromWindow();
   MediaController.getInstance().removeLoadingFileObserver(this);
 }
Ejemplo n.º 7
0
 @Override
 protected void onAttachedToWindow() {
   super.onAttachedToWindow();
   updateButtonState(false);
 }
Ejemplo n.º 8
0
  @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);
    }
  }