summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/calldetails/CallDetailsAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/calldetails/CallDetailsAdapter.java')
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsAdapter.java120
1 files changed, 28 insertions, 92 deletions
diff --git a/java/com/android/dialer/calldetails/CallDetailsAdapter.java b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
index 030366e9f..dfa472a71 100644
--- a/java/com/android/dialer/calldetails/CallDetailsAdapter.java
+++ b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
@@ -17,119 +17,55 @@
package com.android.dialer.calldetails;
import android.content.Context;
-import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.RecyclerView.ViewHolder;
-import android.view.LayoutInflater;
-import android.view.ViewGroup;
-import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
+import android.view.View;
import com.android.dialer.calldetails.CallDetailsFooterViewHolder.DeleteCallDetailsListener;
import com.android.dialer.calldetails.CallDetailsHeaderViewHolder.CallDetailsHeaderListener;
-import com.android.dialer.calllogutils.CallTypeHelper;
-import com.android.dialer.calllogutils.CallbackActionHelper;
-import com.android.dialer.calllogutils.CallbackActionHelper.CallbackAction;
-import com.android.dialer.common.Assert;
import com.android.dialer.dialercontact.DialerContact;
-import com.android.dialer.duo.DuoComponent;
-import java.util.List;
-/** Adapter for RecyclerView in {@link CallDetailsActivity}. */
-final class CallDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
-
- private static final int HEADER_VIEW_TYPE = 1;
- private static final int CALL_ENTRY_VIEW_TYPE = 2;
- private static final int FOOTER_VIEW_TYPE = 3;
+/**
+ * A {@link RecyclerView.Adapter} for {@link CallDetailsActivity}.
+ *
+ * <p>See {@link CallDetailsAdapterCommon} for logic shared between this adapter and {@link
+ * OldCallDetailsAdapter}.
+ */
+final class CallDetailsAdapter extends CallDetailsAdapterCommon {
private final DialerContact contact;
- private final CallDetailsHeaderListener callDetailsHeaderListener;
- private final CallDetailsFooterViewHolder.ReportCallIdListener reportCallIdListener;
- private final DeleteCallDetailsListener deleteCallDetailsListener;
- private final CallTypeHelper callTypeHelper;
- private List<CallDetailsEntry> callDetailsEntries;
CallDetailsAdapter(
Context context,
- @NonNull DialerContact contact,
- @NonNull List<CallDetailsEntry> callDetailsEntries,
+ DialerContact contact,
+ CallDetailsEntries callDetailsEntries,
CallDetailsHeaderListener callDetailsHeaderListener,
CallDetailsFooterViewHolder.ReportCallIdListener reportCallIdListener,
DeleteCallDetailsListener deleteCallDetailsListener) {
- this.contact = Assert.isNotNull(contact);
- this.callDetailsEntries = callDetailsEntries;
- this.callDetailsHeaderListener = callDetailsHeaderListener;
- this.reportCallIdListener = reportCallIdListener;
- this.deleteCallDetailsListener = deleteCallDetailsListener;
- callTypeHelper = new CallTypeHelper(context.getResources(), DuoComponent.get(context).getDuo());
- }
-
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- LayoutInflater inflater = LayoutInflater.from(parent.getContext());
- switch (viewType) {
- case HEADER_VIEW_TYPE:
- return new CallDetailsHeaderViewHolder(
- inflater.inflate(R.layout.contact_container, parent, false), callDetailsHeaderListener);
- case CALL_ENTRY_VIEW_TYPE:
- return new CallDetailsEntryViewHolder(
- inflater.inflate(R.layout.call_details_entry, parent, false));
- case FOOTER_VIEW_TYPE:
- return new CallDetailsFooterViewHolder(
- inflater.inflate(R.layout.call_details_footer, parent, false),
- reportCallIdListener,
- deleteCallDetailsListener);
- default:
- throw Assert.createIllegalStateFailException(
- "No ViewHolder available for viewType: " + viewType);
- }
+ super(
+ context,
+ callDetailsEntries,
+ callDetailsHeaderListener,
+ reportCallIdListener,
+ deleteCallDetailsListener);
+ this.contact = contact;
}
@Override
- public void onBindViewHolder(ViewHolder holder, int position) {
- if (position == 0) { // Header
- ((CallDetailsHeaderViewHolder) holder).updateContactInfo(contact, getCallbackAction());
- ((CallDetailsHeaderViewHolder) holder)
- .updateAssistedDialingInfo(callDetailsEntries.get(position));
- } else if (position == getItemCount() - 1) {
- ((CallDetailsFooterViewHolder) holder).setPhoneNumber(contact.getNumber());
- } else {
- CallDetailsEntryViewHolder viewHolder = (CallDetailsEntryViewHolder) holder;
- CallDetailsEntry entry = callDetailsEntries.get(position - 1);
- viewHolder.setCallDetails(
- contact.getNumber(),
- entry,
- callTypeHelper,
- !entry.getHistoryResultsList().isEmpty() && position != getItemCount() - 2);
- }
+ protected CallDetailsHeaderViewHolder createCallDetailsHeaderViewHolder(
+ View container, CallDetailsHeaderListener callDetailsHeaderListener) {
+ return new CallDetailsHeaderViewHolder(
+ container, contact.getNumber(), contact.getPostDialDigits(), callDetailsHeaderListener);
}
@Override
- public int getItemViewType(int position) {
- if (position == 0) { // Header
- return HEADER_VIEW_TYPE;
- } else if (position == getItemCount() - 1) {
- return FOOTER_VIEW_TYPE;
- } else {
- return CALL_ENTRY_VIEW_TYPE;
- }
+ protected void bindCallDetailsHeaderViewHolder(
+ CallDetailsHeaderViewHolder callDetailsHeaderViewHolder, int position) {
+ callDetailsHeaderViewHolder.updateContactInfo(contact, getCallbackAction());
+ callDetailsHeaderViewHolder.updateAssistedDialingInfo(
+ getCallDetailsEntries().getEntries(position));
}
@Override
- public int getItemCount() {
- return callDetailsEntries.isEmpty()
- ? 0
- : callDetailsEntries.size() + 2; // plus header and footer
- }
-
- void updateCallDetailsEntries(List<CallDetailsEntry> entries) {
- callDetailsEntries = entries;
- notifyDataSetChanged();
- }
-
- private @CallbackAction int getCallbackAction() {
- Assert.checkState(!callDetailsEntries.isEmpty());
-
- CallDetailsEntry entry = callDetailsEntries.get(0);
- return CallbackActionHelper.getCallbackAction(
- contact.getNumber(), entry.getFeatures(), entry.getIsDuoCall());
+ protected String getNumber() {
+ return contact.getNumber();
}
}