1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17 package com.android.dialer.rtt; 18 19 import android.content.Context; 20 import android.content.res.Resources; 21 import android.support.v7.widget.RecyclerView.ViewHolder; 22 import android.text.format.DateUtils; 23 import android.view.Gravity; 24 import android.view.View; 25 import android.widget.ImageView; 26 import android.widget.LinearLayout; 27 import android.widget.LinearLayout.LayoutParams; 28 import android.widget.TextView; 29 import com.android.dialer.glidephotomanager.GlidePhotoManagerComponent; 30 import com.android.dialer.glidephotomanager.PhotoInfo; 31 32 /** ViewHolder class for RTT chat message bubble. */ 33 public class RttTranscriptMessageViewHolder extends ViewHolder { 34 35 private final TextView messageTextView; 36 private final Resources resources; 37 private final ImageView avatarImageView; 38 private final View container; 39 private final TextView timestampTextView; 40 RttTranscriptMessageViewHolder(View view)41 RttTranscriptMessageViewHolder(View view) { 42 super(view); 43 container = view.findViewById(R.id.rtt_chat_message_container); 44 messageTextView = view.findViewById(R.id.rtt_chat_message); 45 avatarImageView = view.findViewById(R.id.rtt_chat_avatar); 46 timestampTextView = view.findViewById(R.id.rtt_chat_timestamp); 47 resources = view.getResources(); 48 } 49 setMessage(RttTranscriptMessage message, boolean isSameGroup, PhotoInfo photoInfo)50 void setMessage(RttTranscriptMessage message, boolean isSameGroup, PhotoInfo photoInfo) { 51 messageTextView.setText(message.getContent()); 52 LinearLayout.LayoutParams params = (LayoutParams) container.getLayoutParams(); 53 params.gravity = message.getIsRemote() ? Gravity.START : Gravity.END; 54 params.topMargin = 55 isSameGroup 56 ? resources.getDimensionPixelSize(R.dimen.rtt_transcript_same_group_message_margin_top) 57 : resources.getDimensionPixelSize(R.dimen.rtt_transcript_message_margin_top); 58 container.setLayoutParams(params); 59 messageTextView.setEnabled(message.getIsRemote()); 60 if (message.getIsRemote()) { 61 if (isSameGroup) { 62 avatarImageView.setVisibility(View.INVISIBLE); 63 } else { 64 avatarImageView.setVisibility(View.VISIBLE); 65 GlidePhotoManagerComponent.get(container.getContext()) 66 .glidePhotoManager() 67 .loadContactPhoto(avatarImageView, photoInfo); 68 } 69 messageTextView.setTextAppearance(R.style.RttTranscriptBubble_Remote); 70 } else { 71 avatarImageView.setVisibility(View.GONE); 72 messageTextView.setTextAppearance(R.style.RttTranscriptBubble_Local); 73 } 74 } 75 showTimestamp(long timestamp, boolean isRemote, boolean showFullDate)76 void showTimestamp(long timestamp, boolean isRemote, boolean showFullDate) { 77 timestampTextView.setVisibility(View.VISIBLE); 78 timestampTextView.setText( 79 getTimestampText(timestampTextView.getContext(), timestamp, showFullDate)); 80 timestampTextView.setGravity(isRemote ? Gravity.START : Gravity.END); 81 } 82 hideTimestamp()83 void hideTimestamp() { 84 timestampTextView.setVisibility(View.GONE); 85 } 86 getTimestampText(Context context, long timestamp, boolean showFullDate)87 private String getTimestampText(Context context, long timestamp, boolean showFullDate) { 88 return DateUtils.formatDateTime( 89 context, 90 timestamp, 91 showFullDate 92 ? DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME 93 : DateUtils.FORMAT_SHOW_TIME); 94 } 95 } 96