blob: 13223db26bc4fbe8fe301fe7e2462d80421211de [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
* Copyright (C) 2023 The LineageOS Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.dialer.rtt;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.recyclerview.widget.RecyclerView;
import com.android.dialer.R;
import com.android.dialer.common.LogUtil;
import com.android.dialer.glidephotomanager.PhotoInfo;
/** Adapter class for holding RTT chat data. */
public class RttTranscriptAdapter extends RecyclerView.Adapter<RttTranscriptMessageViewHolder> {
private PhotoInfo photoInfo;
private final Context context;
private RttTranscript rttTranscript;
private int firstPositionToShowTimestamp;
RttTranscriptAdapter(Context context) {
this.context = context;
}
@Override
public RttTranscriptMessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.rtt_transcript_list_item, parent, false);
return new RttTranscriptMessageViewHolder(view);
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public void onBindViewHolder(RttTranscriptMessageViewHolder rttChatMessageViewHolder, int i) {
boolean isSameGroup = false;
boolean hasMoreInSameGroup = false;
RttTranscriptMessage rttTranscriptMessage = rttTranscript.getMessages(i);
if (i > 0) {
isSameGroup =
rttTranscriptMessage.getIsRemote() == rttTranscript.getMessages(i - 1).getIsRemote();
}
if (i + 1 < getItemCount()) {
hasMoreInSameGroup =
rttTranscriptMessage.getIsRemote() == rttTranscript.getMessages(i + 1).getIsRemote();
}
rttChatMessageViewHolder.setMessage(rttTranscriptMessage, isSameGroup, photoInfo);
if (hasMoreInSameGroup) {
rttChatMessageViewHolder.hideTimestamp();
} else {
rttChatMessageViewHolder.showTimestamp(
rttTranscriptMessage.getTimestamp(),
rttTranscriptMessage.getIsRemote(),
i == firstPositionToShowTimestamp);
}
}
@Override
public int getItemCount() {
if (rttTranscript == null) {
return 0;
}
return rttTranscript.getMessagesCount();
}
void setRttTranscript(RttTranscript rttTranscript) {
if (rttTranscript == null) {
LogUtil.w("RttTranscriptAdapter.setRttTranscript", "null RttTranscript");
return;
}
this.rttTranscript = rttTranscript;
firstPositionToShowTimestamp = findFirstPositionToShowTimestamp(rttTranscript);
notifyDataSetChanged();
}
/**
* Returns first position of message that should show time stamp. This is usually the last one of
* first grouped messages.
*/
protected static int findFirstPositionToShowTimestamp(RttTranscript rttTranscript) {
int i = 0;
while (i + 1 < rttTranscript.getMessagesCount()
&& rttTranscript.getMessages(i).getIsRemote()
== rttTranscript.getMessages(i + 1).getIsRemote()) {
i++;
}
return i;
}
void setPhotoInfo(PhotoInfo photoInfo) {
this.photoInfo = photoInfo;
}
}