content: package im.actor.sdk.controllers.conversation.messages.content;
  
  import android.content.Context;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.TextView;
  
  import im.actor.core.entity.FileReference;
  import im.actor.core.entity.ImageLocation;
  import im.actor.core.entity.Message;
  import im.actor.core.entity.Peer;
  import im.actor.core.entity.content.StickerContent;
  import im.actor.sdk.ActorSDK;
  import im.actor.sdk.R;
  import im.actor.sdk.controllers.conversation.messages.MessagesAdapter;
  import im.actor.sdk.controllers.conversation.messages.content.preprocessor.PreprocessedData;
  import im.actor.sdk.util.DateFormatting;
  import im.actor.sdk.util.Screen;
  import im.actor.sdk.view.TintImageView;
  import im.actor.sdk.view.emoji.stickers.StickerView;
  
  import static im.actor.sdk.util.ActorSDKMessenger.myUid;
  
  /**
   * Created by ex3ndr on 27.02.15.
   */
  public class StickerHolder extends MessageHolder {
  
  
      private Context context;
  
      private final int COLOR_PENDING;
      private final int COLOR_SENT;
      private final int COLOR_RECEIVED;
      private final int COLOR_READ;
      private final int COLOR_ERROR;
      private TextView time;
      private TintImageView stateIcon;
  
  
      // Content Views
      private StickerView sticker;
  
      public StickerHolder(MessagesAdapter adapter, View itemView, Peer peer) {
  
          super(adapter, itemView, false);
          this.context = adapter.getMessagesFragment().getActivity();
  
          COLOR_PENDING = ActorSDK.sharedActor().style.getConvMediaStatePendingColor();
          COLOR_SENT = ActorSDK.sharedActor().style.getConvMediaStateSentColor();
          COLOR_RECEIVED = ActorSDK.sharedActor().style.getConvMediaStateDeliveredColor();
          COLOR_READ = ActorSDK.sharedActor().style.getConvMediaStateReadColor();
          COLOR_ERROR = ActorSDK.sharedActor().style.getConvMediaStateErrorColor();
  
          sticker = (StickerView) itemView.findViewById(R.id.sticker);
          time = (TextView) itemView.findViewById(R.id.time);
          stateIcon = (TintImageView) itemView.findViewById(R.id.stateIcon);
  
          onConfigureViewHolder();
      }
  
      @Override
      protected void bindData(Message message, long readDate, long receiveDate, boolean isNewMessage, PreprocessedData preprocessedData) {
          StickerContent content = (StickerContent) message.getContent();
          ImageLocation image512 = content.getImage512();
          if (image512 == null) {
              return;
          }
          FileReference fileReference = image512.getReference();
          sticker.bind(fileReference, StickerView.STICKER_FULL);
  
          int w = image512.getWidth();
          int h = image512.getHeight();
  
          int maxHeight = context.getResources().getDisplayMetrics().heightPixels - Screen.dp(96 + 32);
          maxHeight = Math.min(Screen.dp(200), maxHeight);
          int maxWidth = context.getResources().getDisplayMetrics().widthPixels - Screen.dp(32 + 48);
          maxWidth = Math.min(Screen.dp(200), maxWidth);
  
          float scale = Math.min(maxWidth / (float) w, maxHeight / (float) h);
  
          int bubbleW = (int) (scale * w);
          int bubbleH = (int) (scale * h);
          ViewGroup.LayoutParams params = sticker.getLayoutParams();
          params.height = bubbleH;
          params.width = bubbleW;
  
  
          // Update state
          if (message.getSenderId() == myUid()) {
              stateIcon.setVisibility(View.VISIBLE);
              switch (message.getMessageState()) {
                  case SENT:
                      if (message.getSortDate() <= readDate) {
                          stateIcon.setResource(R.drawable.msg_check_2);
                          stateIcon.setTint(COLOR_READ);
                      } else if (message.getSortDate() <= receiveDate) {
                          stateIcon.setResource(R.drawable.msg_check_2);
                          stateIcon.setTint(COLOR_RECEIVED);
                      } else {
                          stateIcon.setResource(R.drawable.msg_check_1);
                          stateIcon.setTint(COLOR_SENT);
                      }
                      break;
                  default:
                  case PENDING:
                      stateIcon.setResource(R.drawable.msg_clock);
                      stateIcon.setTint(COLOR_PENDING);
                      break;
                  case ERROR:
                      stateIcon.setResource(R.drawable.msg_error);
                      stateIcon.setTint(COLOR_ERROR);
                      break;
              }
          } else {
              stateIcon.setVisibility(View.GONE);
          }
  
          // Update time
          time.setText(DateFormatting.formatTime(message.getDate()));
  
      }
  
  
      @Override
      public void unbind() {
          super.unbind();
  
          sticker.unbind();
      }
  
  
  }
  