Пример #1
0
  public void update(int mask) {
    TLRPC.FileLocation photo = null;
    if (user != null) {
      if (user.photo != null) {
        photo = user.photo.photo_small;
      }
      avatarDrawable.setInfo(user);
    } else if (chat != null) {
      if (chat.photo != null) {
        photo = chat.photo.photo_small;
      }
      avatarDrawable.setInfo(chat);
    } else {
      avatarDrawable.setInfo(0, null, null, false);
    }

    if (mask != 0) {
      boolean continueUpdate = false;
      if ((mask & MessagesController.UPDATE_MASK_AVATAR) != 0 && user != null
          || (mask & MessagesController.UPDATE_MASK_CHAT_AVATAR) != 0 && chat != null) {
        if (lastAvatar != null && photo == null
            || lastAvatar == null
                && photo != null
                && lastAvatar != null
                && photo != null
                && (lastAvatar.volume_id != photo.volume_id
                    || lastAvatar.local_id != photo.local_id)) {
          continueUpdate = true;
        }
      }
      if (!continueUpdate && (mask & MessagesController.UPDATE_MASK_STATUS) != 0 && user != null) {
        int newStatus = 0;
        if (user.status != null) {
          newStatus = user.status.expires;
        }
        if (newStatus != lastStatus) {
          continueUpdate = true;
        }
      }
      if (!continueUpdate && ((mask & MessagesController.UPDATE_MASK_NAME) != 0 && user != null)
          || (mask & MessagesController.UPDATE_MASK_CHAT_NAME) != 0 && chat != null) {
        String newName;
        if (user != null) {
          newName = user.first_name + user.last_name;
        } else {
          newName = chat.title;
        }
        if (!newName.equals(lastName)) {
          continueUpdate = true;
        }
      }
      if (!continueUpdate
          && drawCount
          && (mask & MessagesController.UPDATE_MASK_READ_DIALOG_MESSAGE) != 0) {
        TLRPC.TL_dialog dialog = MessagesController.getInstance().dialogs_dict.get(dialog_id);
        if (dialog != null && dialog.unread_count != lastUnreadCount) {
          continueUpdate = true;
        }
      }

      if (!continueUpdate) {
        return;
      }
    }

    if (user != null) {
      if (user.status != null) {
        lastStatus = user.status.expires;
      } else {
        lastStatus = 0;
      }
      lastName = user.first_name + user.last_name;
    } else if (chat != null) {
      lastName = chat.title;
    }

    lastAvatar = photo;
    avatarImage.setImage(photo, "50_50", avatarDrawable, null, false);

    if (getMeasuredWidth() != 0 || getMeasuredHeight() != 0) {
      buildLayout();
    } else {
      requestLayout();
    }
    postInvalidate();
  }
Пример #2
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);
    }
  }