Files
packages_apps_Messaging/src/com/android/messaging/ui/conversation/ConversationMessageAdapter.java
T
Aurimas Liutikas 1b693ea7df Migrate Messaging to androidx.
Test: make messaging
Bug: 76692459
Change-Id: I9103450622f129311545648ac75f5b2f9fc2d04a
Merged-In: I9103450622f129311545648ac75f5b2f9fc2d04a
2019-02-14 22:59:57 +00:00

118 lines
4.6 KiB
Java

/*
* Copyright (C) 2015 The Android Open Source 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.messaging.ui.conversation;
import android.content.Context;
import android.database.Cursor;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.android.messaging.R;
import com.android.messaging.ui.AsyncImageView;
import com.android.messaging.ui.CursorRecyclerAdapter;
import com.android.messaging.ui.AsyncImageView.AsyncImageViewDelayLoader;
import com.android.messaging.ui.conversation.ConversationMessageView.ConversationMessageViewHost;
import com.android.messaging.util.Assert;
import java.util.HashSet;
import java.util.List;
/**
* Provides an interface to expose Conversation Message Cursor data to a UI widget like a
* RecyclerView.
*/
public class ConversationMessageAdapter extends
CursorRecyclerAdapter<ConversationMessageAdapter.ConversationMessageViewHolder> {
private final ConversationMessageViewHost mHost;
private final AsyncImageViewDelayLoader mImageViewDelayLoader;
private final View.OnClickListener mViewClickListener;
private final View.OnLongClickListener mViewLongClickListener;
private boolean mOneOnOne;
private String mSelectedMessageId;
public ConversationMessageAdapter(final Context context, final Cursor cursor,
final ConversationMessageViewHost host,
final AsyncImageViewDelayLoader imageViewDelayLoader,
final View.OnClickListener viewClickListener,
final View.OnLongClickListener longClickListener) {
super(context, cursor, 0);
mHost = host;
mViewClickListener = viewClickListener;
mViewLongClickListener = longClickListener;
mImageViewDelayLoader = imageViewDelayLoader;
setHasStableIds(true);
}
@Override
public void bindViewHolder(final ConversationMessageViewHolder holder,
final Context context, final Cursor cursor) {
Assert.isTrue(holder.mView instanceof ConversationMessageView);
final ConversationMessageView conversationMessageView =
(ConversationMessageView) holder.mView;
conversationMessageView.bind(cursor, mOneOnOne, mSelectedMessageId);
}
@Override
public ConversationMessageViewHolder createViewHolder(final Context context,
final ViewGroup parent, final int viewType) {
final LayoutInflater layoutInflater = LayoutInflater.from(context);
final ConversationMessageView conversationMessageView = (ConversationMessageView)
layoutInflater.inflate(R.layout.conversation_message_view, null);
conversationMessageView.setHost(mHost);
conversationMessageView.setImageViewDelayLoader(mImageViewDelayLoader);
return new ConversationMessageViewHolder(conversationMessageView,
mViewClickListener, mViewLongClickListener);
}
public void setSelectedMessage(final String messageId) {
mSelectedMessageId = messageId;
notifyDataSetChanged();
}
public void setOneOnOne(final boolean oneOnOne, final boolean invalidate) {
if (mOneOnOne != oneOnOne) {
mOneOnOne = oneOnOne;
if (invalidate) {
notifyDataSetChanged();
}
}
}
/**
* ViewHolder that holds a ConversationMessageView.
*/
public static class ConversationMessageViewHolder extends RecyclerView.ViewHolder {
final View mView;
/**
* @param viewClickListener a View.OnClickListener that should define the interaction when
* an item in the RecyclerView is clicked.
*/
public ConversationMessageViewHolder(final View itemView,
final View.OnClickListener viewClickListener,
final View.OnLongClickListener viewLongClickListener) {
super(itemView);
mView = itemView;
mView.setOnClickListener(viewClickListener);
mView.setOnLongClickListener(viewLongClickListener);
}
}
}