MessageRenderer.java 4.97 KB
Newer Older
1 2 3
package chat.rocket.android.renderer;

import android.content.Context;
4
import android.support.graphics.drawable.VectorDrawableCompat;
Yusuke Iwaki's avatar
Yusuke Iwaki committed
5
import android.view.View;
6
import android.widget.TextView;
Tiago Cunha's avatar
Tiago Cunha committed
7

Tiago Cunha's avatar
Tiago Cunha committed
8
import java.util.List;
9
import chat.rocket.android.R;
Tiago Cunha's avatar
Tiago Cunha committed
10
import chat.rocket.android.helper.Avatar;
11
import chat.rocket.android.helper.DateTime;
Yusuke Iwaki's avatar
Yusuke Iwaki committed
12
import chat.rocket.android.helper.TextUtils;
13
import chat.rocket.android.widget.AbsoluteUrl;
Tiago Cunha's avatar
Tiago Cunha committed
14
import chat.rocket.core.SyncState;
Tiago Cunha's avatar
Tiago Cunha committed
15 16
import chat.rocket.core.models.Attachment;
import chat.rocket.core.models.Message;
Tiago Cunha's avatar
Tiago Cunha committed
17
import chat.rocket.android.widget.RocketChatAvatar;
Yusuke Iwaki's avatar
Yusuke Iwaki committed
18
import chat.rocket.android.widget.message.RocketChatMessageAttachmentsLayout;
19
import chat.rocket.android.widget.message.RocketChatMessageLayout;
Yusuke Iwaki's avatar
Yusuke Iwaki committed
20
import chat.rocket.android.widget.message.RocketChatMessageUrlsLayout;
Tiago Cunha's avatar
Tiago Cunha committed
21 22
import chat.rocket.core.models.User;
import chat.rocket.core.models.WebContent;
23 24

/**
Tiago Cunha's avatar
Tiago Cunha committed
25
 * Renderer for RealmMessage model.
26
 */
Tiago Cunha's avatar
Tiago Cunha committed
27
public class MessageRenderer extends AbstractRenderer<Message> {
28

29
  private final UserRenderer userRenderer;
30
  private final boolean autoloadImages;
31

32
  public MessageRenderer(Context context, Message message, boolean autoloadImages) {
33
    super(context, message);
Tiago Cunha's avatar
Tiago Cunha committed
34
    userRenderer = new UserRenderer(context, message.getUser());
35
    this.autoloadImages = autoloadImages;
36 37 38 39 40
  }

  /**
   * show Avatar image.
   */
41
  public MessageRenderer avatarInto(RocketChatAvatar rocketChatAvatar, AbsoluteUrl absoluteUrl) {
Tiago Cunha's avatar
Tiago Cunha committed
42
    if (object.getSyncState() == SyncState.FAILED) {
43 44
      rocketChatAvatar.loadImage(VectorDrawableCompat
          .create(context.getResources(), R.drawable.ic_error_outline_black_24dp, null));
Tiago Cunha's avatar
Tiago Cunha committed
45
    } else if (TextUtils.isEmpty(object.getAvatar())) {
46
      userRenderer.avatarInto(rocketChatAvatar, absoluteUrl);
Tiago Cunha's avatar
Tiago Cunha committed
47
    } else {
Tiago Cunha's avatar
Tiago Cunha committed
48
      final User user = object.getUser();
49
      setAvatarInto(object.getAvatar(), absoluteUrl, user == null ? null : user.getUsername(),
50
          rocketChatAvatar);
51
    }
52 53 54 55 56 57
    return this;
  }

  /**
   * show Username in textView.
   */
58
  public MessageRenderer usernameInto(TextView usernameTextView, TextView subUsernameTextView) {
Tiago Cunha's avatar
Tiago Cunha committed
59
    if (TextUtils.isEmpty(object.getAlias())) {
60 61 62 63
      userRenderer.usernameInto(usernameTextView);
      if (subUsernameTextView != null) {
        subUsernameTextView.setVisibility(View.GONE);
      }
Tiago Cunha's avatar
Tiago Cunha committed
64
    } else {
65
      aliasAndUsernameInto(usernameTextView, subUsernameTextView);
Tiago Cunha's avatar
Tiago Cunha committed
66
    }
67 68 69 70 71 72 73 74 75 76 77
    return this;
  }

  /**
   * show timestamp in textView.
   */
  public MessageRenderer timestampInto(TextView textView) {
    if (!shouldHandle(textView)) {
      return this;
    }

78
    switch (object.getSyncState()) {
79 80 81 82 83
      case SyncState.NOT_SYNCED:
      case SyncState.SYNCING:
        textView.setText(R.string.sending);
        break;
      default:
84
        textView.setText(DateTime.fromEpocMs(object.getTimestamp(), DateTime.Format.TIME));
85 86
        break;
    }
87 88 89 90 91 92 93 94 95 96 97 98

    return this;
  }

  /**
   * show body in RocketChatMessageLayout.
   */
  public MessageRenderer bodyInto(RocketChatMessageLayout rocketChatMessageLayout) {
    if (!shouldHandle(rocketChatMessageLayout)) {
      return this;
    }

99
    rocketChatMessageLayout.setText(object.getMessage());
100 101 102

    return this;
  }
Yusuke Iwaki's avatar
Yusuke Iwaki committed
103 104 105 106 107 108 109 110 111

  /**
   * show urls in RocketChatMessageUrlsLayout.
   */
  public MessageRenderer urlsInto(RocketChatMessageUrlsLayout urlsLayout) {
    if (!shouldHandle(urlsLayout)) {
      return this;
    }

Tiago Cunha's avatar
Tiago Cunha committed
112 113
    List<WebContent> webContents = object.getWebContents();
    if (webContents == null || webContents.size() == 0) {
Yusuke Iwaki's avatar
Yusuke Iwaki committed
114 115 116
      urlsLayout.setVisibility(View.GONE);
    } else {
      urlsLayout.setVisibility(View.VISIBLE);
117
      urlsLayout.setUrls(webContents, autoloadImages);
Yusuke Iwaki's avatar
Yusuke Iwaki committed
118 119 120 121 122 123 124 125
    }

    return this;
  }

  /**
   * show urls in RocketChatMessageUrlsLayout.
   */
126
  public MessageRenderer attachmentsInto(RocketChatMessageAttachmentsLayout attachmentsLayout,
127
                                         AbsoluteUrl absoluteUrl) {
Yusuke Iwaki's avatar
Yusuke Iwaki committed
128 129 130 131
    if (!shouldHandle(attachmentsLayout)) {
      return this;
    }

Tiago Cunha's avatar
Tiago Cunha committed
132 133
    List<Attachment> attachments = object.getAttachments();
    if (attachments == null || attachments.size() == 0) {
Yusuke Iwaki's avatar
Yusuke Iwaki committed
134 135 136
      attachmentsLayout.setVisibility(View.GONE);
    } else {
      attachmentsLayout.setVisibility(View.VISIBLE);
137
      attachmentsLayout.setAbsoluteUrl(absoluteUrl);
138
      attachmentsLayout.setAttachments(attachments, autoloadImages);
Yusuke Iwaki's avatar
Yusuke Iwaki committed
139 140 141 142 143
    }

    return this;
  }

144
  private void setAvatarInto(String avatar, AbsoluteUrl absoluteUrl, String username,
145
                             RocketChatAvatar imageView) {
146
    imageView.loadImage(avatar, new Avatar(absoluteUrl, username).getTextDrawable(context));
Tiago Cunha's avatar
Tiago Cunha committed
147 148
  }

149 150 151
  private void aliasAndUsernameInto(TextView aliasTextView, TextView usernameTextView) {
    if (shouldHandle(aliasTextView)) {
      aliasTextView.setText(object.getAlias());
Tiago Cunha's avatar
Tiago Cunha committed
152 153
    }

154 155 156 157 158 159 160 161
    if (shouldHandle(usernameTextView)) {
      if (object.getUser() != null) {
        usernameTextView.setText("@" + object.getUser().getUsername());
        usernameTextView.setVisibility(View.VISIBLE);
      } else {
        usernameTextView.setVisibility(View.GONE);
      }
    }
Tiago Cunha's avatar
Tiago Cunha committed
162 163
  }

164
}