summaryrefslogtreecommitdiff
path: root/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/dialer/calllog/CallLogListItemViewHolder.java')
-rw-r--r--src/com/android/dialer/calllog/CallLogListItemViewHolder.java776
1 files changed, 0 insertions, 776 deletions
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
deleted file mode 100644
index 858cc2102..000000000
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ /dev/null
@@ -1,776 +0,0 @@
-/*
- * Copyright (C) 2011 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.dialer.calllog;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.net.Uri;
-import android.provider.CallLog;
-import android.provider.CallLog.Calls;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.support.v7.widget.CardView;
-import android.support.v7.widget.RecyclerView;
-import android.telecom.PhoneAccountHandle;
-import android.text.BidiFormatter;
-import android.text.TextDirectionHeuristics;
-import android.text.TextUtils;
-import android.view.ContextMenu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewStub;
-import android.widget.ImageButton;
-import android.widget.ImageView;
-import android.widget.QuickContactBadge;
-import android.widget.TextView;
-
-import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.ClipboardUtils;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.dialog.CallSubjectDialog;
-import com.android.contacts.common.testing.NeededForTesting;
-import com.android.contacts.common.util.UriUtils;
-import com.android.dialer.DialtactsActivity;
-import com.android.dialer.R;
-import com.android.dialer.calllog.calllogcache.CallLogCache;
-import com.android.dialer.compat.FilteredNumberCompat;
-import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
-import com.android.dialer.filterednumber.BlockNumberDialogFragment;
-import com.android.dialer.filterednumber.BlockedNumbersMigrator;
-import com.android.dialer.filterednumber.FilteredNumbersUtil;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.ScreenEvent;
-import com.android.dialer.util.DialerUtils;
-import com.android.dialer.util.PhoneNumberUtil;
-import com.android.dialer.voicemail.VoicemailPlaybackLayout;
-import com.android.dialer.voicemail.VoicemailPlaybackPresenter;
-
-/**
- * This is an object containing references to views contained by the call log list item. This
- * improves performance by reducing the frequency with which we need to find views by IDs.
- *
- * This object also contains UI logic pertaining to the view, to isolate it from the CallLogAdapter.
- */
-public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
- implements View.OnClickListener, MenuItem.OnMenuItemClickListener,
- View.OnCreateContextMenuListener {
-
- public interface OnClickListener {
- void onBlockReportSpam(
- String displayNumber, String number, String countryIso, int callType);
- void onBlock(String displayNumber, String number, String countryIso, int callType);
- void onUnblock(String displayNumber, String number, String countryIso, Integer blockId,
- boolean isSpam, int callType);
- void onReportNotSpam(String displayNumber, String number, String countryIso, int callType);
- }
-
- /** The root view of the call log list item */
- public final View rootView;
- /** The quick contact badge for the contact. */
- public final QuickContactBadge quickContactView;
- /** The primary action view of the entry. */
- public final View primaryActionView;
- /** The details of the phone call. */
- public final PhoneCallDetailsViews phoneCallDetailsViews;
- /** The text of the header for a day grouping. */
- public final TextView dayGroupHeader;
- /** The view containing the details for the call log row, including the action buttons. */
- public final CardView callLogEntryView;
- /** The actionable view which places a call to the number corresponding to the call log row. */
- public final ImageView primaryActionButtonView;
-
- /** The view containing call log item actions. Null until the ViewStub is inflated. */
- public View actionsView;
- /** The button views below are assigned only when the action section is expanded. */
- public VoicemailPlaybackLayout voicemailPlaybackView;
- public View callButtonView;
- public View videoCallButtonView;
- public View createNewContactButtonView;
- public View addToExistingContactButtonView;
- public View sendMessageView;
- public View blockReportView;
- public View blockView;
- public View unblockView;
- public View reportNotSpamView;
- public View detailsButtonView;
- public View callWithNoteButtonView;
- public ImageView workIconView;
-
- /**
- * The row Id for the first call associated with the call log entry. Used as a key for the
- * map used to track which call log entries have the action button section expanded.
- */
- public long rowId;
-
- /**
- * The call Ids for the calls represented by the current call log entry. Used when the user
- * deletes a call log entry.
- */
- public long[] callIds;
-
- /**
- * The callable phone number for the current call log entry. Cached here as the call back
- * intent is set only when the actions ViewStub is inflated.
- */
- public String number;
-
- /**
- * The post-dial numbers that are dialed following the phone number.
- */
- public String postDialDigits;
-
- /**
- * The formatted phone number to display.
- */
- public String displayNumber;
-
- /**
- * The phone number presentation for the current call log entry. Cached here as the call back
- * intent is set only when the actions ViewStub is inflated.
- */
- public int numberPresentation;
-
- /**
- * The type of the phone number (e.g. main, work, etc).
- */
- public String numberType;
-
- /**
- * The country iso for the call. Cached here as the call back
- * intent is set only when the actions ViewStub is inflated.
- */
- public String countryIso;
-
- /**
- * The type of call for the current call log entry. Cached here as the call back
- * intent is set only when the actions ViewStub is inflated.
- */
- public int callType;
-
- /**
- * ID for blocked numbers database.
- * Set when context menu is created, if the number is blocked.
- */
- public Integer blockId;
-
- /**
- * The account for the current call log entry. Cached here as the call back
- * intent is set only when the actions ViewStub is inflated.
- */
- public PhoneAccountHandle accountHandle;
-
- /**
- * If the call has an associated voicemail message, the URI of the voicemail message for
- * playback. Cached here as the voicemail intent is only set when the actions ViewStub is
- * inflated.
- */
- public String voicemailUri;
-
- /**
- * The name or number associated with the call. Cached here for use when setting content
- * descriptions on buttons in the actions ViewStub when it is inflated.
- */
- public CharSequence nameOrNumber;
-
- /**
- * The call type or Location associated with the call. Cached here for use when setting text
- * for a voicemail log's call button
- */
- public CharSequence callTypeOrLocation;
-
- /**
- * Whether this row is for a business or not.
- */
- public boolean isBusiness;
-
- /**
- * The contact info for the contact displayed in this list item.
- */
- public ContactInfo info;
-
- /**
- * Whether spam feature is enabled, which affects UI.
- */
- public boolean isSpamFeatureEnabled;
-
- /**
- * Whether the current log entry is a spam number or not.
- */
- public boolean isSpam;
-
- /**
- * Whether this is the archive tab or not.
- */
- public final boolean isArchiveTab;
-
- private final Context mContext;
- private final CallLogCache mCallLogCache;
- private final CallLogListItemHelper mCallLogListItemHelper;
- private final VoicemailPlaybackPresenter mVoicemailPlaybackPresenter;
- private final FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler;
- private final OnClickListener mBlockReportListener;
-
- private final BlockNumberDialogFragment.Callback mFilteredNumberDialogCallback;
-
- private final int mPhotoSize;
-
- private View.OnClickListener mExpandCollapseListener;
- private boolean mVoicemailPrimaryActionButtonClicked;
-
- private CallLogListItemViewHolder(
- Context context,
- OnClickListener blockReportListener,
- View.OnClickListener expandCollapseListener,
- CallLogCache callLogCache,
- CallLogListItemHelper callLogListItemHelper,
- VoicemailPlaybackPresenter voicemailPlaybackPresenter,
- FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler,
- BlockNumberDialogFragment.Callback filteredNumberDialogCallback,
- View rootView,
- QuickContactBadge quickContactView,
- View primaryActionView,
- PhoneCallDetailsViews phoneCallDetailsViews,
- CardView callLogEntryView,
- TextView dayGroupHeader,
- ImageView primaryActionButtonView,
- boolean isArchiveTab) {
- super(rootView);
-
- mContext = context;
- mExpandCollapseListener = expandCollapseListener;
- mCallLogCache = callLogCache;
- mCallLogListItemHelper = callLogListItemHelper;
- mVoicemailPlaybackPresenter = voicemailPlaybackPresenter;
- mFilteredNumberAsyncQueryHandler = filteredNumberAsyncQueryHandler;
- mFilteredNumberDialogCallback = filteredNumberDialogCallback;
- mBlockReportListener = blockReportListener;
-
- this.rootView = rootView;
- this.quickContactView = quickContactView;
- this.primaryActionView = primaryActionView;
- this.phoneCallDetailsViews = phoneCallDetailsViews;
- this.callLogEntryView = callLogEntryView;
- this.dayGroupHeader = dayGroupHeader;
- this.primaryActionButtonView = primaryActionButtonView;
- this.workIconView = (ImageView) rootView.findViewById(R.id.work_profile_icon);
- this.isArchiveTab = isArchiveTab;
- Resources resources = mContext.getResources();
- mPhotoSize = mContext.getResources().getDimensionPixelSize(R.dimen.contact_photo_size);
-
- // Set text height to false on the TextViews so they don't have extra padding.
- phoneCallDetailsViews.nameView.setElegantTextHeight(false);
- phoneCallDetailsViews.callLocationAndDate.setElegantTextHeight(false);
-
- quickContactView.setOverlay(null);
- if (CompatUtils.hasPrioritizedMimeType()) {
- quickContactView.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE);
- }
- primaryActionButtonView.setOnClickListener(this);
- primaryActionView.setOnClickListener(mExpandCollapseListener);
- primaryActionView.setOnCreateContextMenuListener(this);
- }
-
- public static CallLogListItemViewHolder create(
- View view,
- Context context,
- OnClickListener blockReportListener,
- View.OnClickListener expandCollapseListener,
- CallLogCache callLogCache,
- CallLogListItemHelper callLogListItemHelper,
- VoicemailPlaybackPresenter voicemailPlaybackPresenter,
- FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler,
- BlockNumberDialogFragment.Callback filteredNumberDialogCallback,
- boolean isArchiveTab) {
-
- return new CallLogListItemViewHolder(
- context,
- blockReportListener,
- expandCollapseListener,
- callLogCache,
- callLogListItemHelper,
- voicemailPlaybackPresenter,
- filteredNumberAsyncQueryHandler,
- filteredNumberDialogCallback,
- view,
- (QuickContactBadge) view.findViewById(R.id.quick_contact_photo),
- view.findViewById(R.id.primary_action_view),
- PhoneCallDetailsViews.fromView(view),
- (CardView) view.findViewById(R.id.call_log_row),
- (TextView) view.findViewById(R.id.call_log_day_group_label),
- (ImageView) view.findViewById(R.id.primary_action_button),
- isArchiveTab);
- }
-
- @Override
- public void onCreateContextMenu(
- final ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
- if (TextUtils.isEmpty(number)) {
- return;
- }
-
- if (callType == CallLog.Calls.VOICEMAIL_TYPE) {
- menu.setHeaderTitle(mContext.getResources().getText(R.string.voicemail));
- } else {
- menu.setHeaderTitle(PhoneNumberUtilsCompat.createTtsSpannable(
- BidiFormatter.getInstance().unicodeWrap(number, TextDirectionHeuristics.LTR)));
- }
-
- menu.add(ContextMenu.NONE, R.id.context_menu_copy_to_clipboard, ContextMenu.NONE,
- R.string.action_copy_number_text)
- .setOnMenuItemClickListener(this);
-
- // The edit number before call does not show up if any of the conditions apply:
- // 1) Number cannot be called
- // 2) Number is the voicemail number
- // 3) Number is a SIP address
-
- if (PhoneNumberUtil.canPlaceCallsTo(number, numberPresentation)
- && !mCallLogCache.isVoicemailNumber(accountHandle, number)
- && !PhoneNumberUtil.isSipNumber(number)) {
- menu.add(ContextMenu.NONE, R.id.context_menu_edit_before_call, ContextMenu.NONE,
- R.string.action_edit_number_before_call)
- .setOnMenuItemClickListener(this);
- }
-
- if (callType == CallLog.Calls.VOICEMAIL_TYPE
- && phoneCallDetailsViews.voicemailTranscriptionView.length() > 0) {
- menu.add(ContextMenu.NONE, R.id.context_menu_copy_transcript_to_clipboard,
- ContextMenu.NONE, R.string.copy_transcript_text)
- .setOnMenuItemClickListener(this);
- }
-
- if (FilteredNumberCompat.canAttemptBlockOperations(mContext)
- && FilteredNumbersUtil.canBlockNumber(mContext, number, countryIso)) {
- mFilteredNumberAsyncQueryHandler.isBlockedNumber(
- new FilteredNumberAsyncQueryHandler.OnCheckBlockedListener() {
- @Override
- public void onCheckComplete(Integer id) {
- blockId = id;
- int blockTitleId = blockId == null ? R.string.action_block_number
- : R.string.action_unblock_number;
- final MenuItem blockItem = menu.add(
- ContextMenu.NONE,
- R.id.context_menu_block_number,
- ContextMenu.NONE,
- blockTitleId);
- blockItem.setOnMenuItemClickListener(
- CallLogListItemViewHolder.this);
- }
- }, number, countryIso);
- }
-
- Logger.logScreenView(ScreenEvent.CALL_LOG_CONTEXT_MENU, (Activity) mContext);
- }
-
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- int resId = item.getItemId();
- if (resId == R.id.context_menu_block_number) {
- FilteredNumberCompat
- .showBlockNumberDialogFlow(mContext.getContentResolver(), blockId, number,
- countryIso, displayNumber, R.id.floating_action_button_container,
- ((Activity) mContext).getFragmentManager(),
- mFilteredNumberDialogCallback);
- return true;
- } else if (resId == R.id.context_menu_copy_to_clipboard) {
- ClipboardUtils.copyText(mContext, null, number, true);
- return true;
- } else if (resId == R.id.context_menu_copy_transcript_to_clipboard) {
- ClipboardUtils.copyText(mContext, null,
- phoneCallDetailsViews.voicemailTranscriptionView.getText(), true);
- return true;
- } else if (resId == R.id.context_menu_edit_before_call) {
- final Intent intent = new Intent(
- Intent.ACTION_DIAL, CallUtil.getCallUri(number));
- intent.setClass(mContext, DialtactsActivity.class);
- DialerUtils.startActivityWithErrorToast(mContext, intent);
- return true;
- }
- return false;
- }
-
- /**
- * Configures the action buttons in the expandable actions ViewStub. The ViewStub is not
- * inflated during initial binding, so click handlers, tags and accessibility text must be set
- * here, if necessary.
- */
- public void inflateActionViewStub() {
- ViewStub stub = (ViewStub) rootView.findViewById(R.id.call_log_entry_actions_stub);
- if (stub != null) {
- actionsView = stub.inflate();
-
- voicemailPlaybackView = (VoicemailPlaybackLayout) actionsView
- .findViewById(R.id.voicemail_playback_layout);
- if (isArchiveTab) {
- voicemailPlaybackView.hideArchiveButton();
- }
-
-
- callButtonView = actionsView.findViewById(R.id.call_action);
- callButtonView.setOnClickListener(this);
-
- videoCallButtonView = actionsView.findViewById(R.id.video_call_action);
- videoCallButtonView.setOnClickListener(this);
-
- createNewContactButtonView = actionsView.findViewById(R.id.create_new_contact_action);
- createNewContactButtonView.setOnClickListener(this);
-
- addToExistingContactButtonView =
- actionsView.findViewById(R.id.add_to_existing_contact_action);
- addToExistingContactButtonView.setOnClickListener(this);
-
- sendMessageView = actionsView.findViewById(R.id.send_message_action);
- sendMessageView.setOnClickListener(this);
-
- blockReportView = actionsView.findViewById(R.id.block_report_action);
- blockReportView.setOnClickListener(this);
-
- blockView = actionsView.findViewById(R.id.block_action);
- blockView.setOnClickListener(this);
-
- unblockView = actionsView.findViewById(R.id.unblock_action);
- unblockView.setOnClickListener(this);
-
- reportNotSpamView = actionsView.findViewById(R.id.report_not_spam_action);
- reportNotSpamView.setOnClickListener(this);
-
- detailsButtonView = actionsView.findViewById(R.id.details_action);
- detailsButtonView.setOnClickListener(this);
-
- callWithNoteButtonView = actionsView.findViewById(R.id.call_with_note_action);
- callWithNoteButtonView.setOnClickListener(this);
- }
-
- bindActionButtons();
- }
-
- private void updatePrimaryActionButton(boolean isExpanded) {
- if (!TextUtils.isEmpty(voicemailUri)) {
- // Treat as voicemail list item; show play button if not expanded.
- if (!isExpanded) {
- primaryActionButtonView.setImageResource(R.drawable.ic_play_arrow_24dp);
- primaryActionButtonView.setContentDescription(TextUtils.expandTemplate(
- mContext.getString(R.string.description_voicemail_action),
- nameOrNumber));
- primaryActionButtonView.setVisibility(View.VISIBLE);
- } else {
- primaryActionButtonView.setVisibility(View.GONE);
- }
- } else {
- // Treat as normal list item; show call button, if possible.
- if (PhoneNumberUtil.canPlaceCallsTo(number, numberPresentation)) {
- boolean isVoicemailNumber =
- mCallLogCache.isVoicemailNumber(accountHandle, number);
- if (isVoicemailNumber) {
- // Call to generic voicemail number, in case there are multiple accounts.
- primaryActionButtonView.setTag(
- IntentProvider.getReturnVoicemailCallIntentProvider());
- } else {
- primaryActionButtonView.setTag(
- IntentProvider.getReturnCallIntentProvider(number + postDialDigits));
- }
-
- primaryActionButtonView.setContentDescription(TextUtils.expandTemplate(
- mContext.getString(R.string.description_call_action),
- nameOrNumber));
- primaryActionButtonView.setImageResource(R.drawable.ic_call_24dp);
- primaryActionButtonView.setVisibility(View.VISIBLE);
- } else {
- primaryActionButtonView.setTag(null);
- primaryActionButtonView.setVisibility(View.GONE);
- }
- }
- }
-
- /**
- * Binds text titles, click handlers and intents to the voicemail, details and callback action
- * buttons.
- */
- private void bindActionButtons() {
- boolean canPlaceCallToNumber = PhoneNumberUtil.canPlaceCallsTo(number, numberPresentation);
-
- if (!TextUtils.isEmpty(voicemailUri) && canPlaceCallToNumber) {
- callButtonView.setTag(IntentProvider.getReturnCallIntentProvider(number));
- ((TextView) callButtonView.findViewById(R.id.call_action_text))
- .setText(TextUtils.expandTemplate(
- mContext.getString(R.string.call_log_action_call),
- nameOrNumber));
- TextView callTypeOrLocationView = ((TextView) callButtonView.findViewById(
- R.id.call_type_or_location_text));
- if (callType == Calls.VOICEMAIL_TYPE && !TextUtils.isEmpty(callTypeOrLocation)) {
- callTypeOrLocationView.setText(callTypeOrLocation);
- callTypeOrLocationView.setVisibility(View.VISIBLE);
- } else {
- callTypeOrLocationView.setVisibility(View.GONE);
- }
- callButtonView.setVisibility(View.VISIBLE);
- } else {
- callButtonView.setVisibility(View.GONE);
- }
-
- // If one of the calls had video capabilities, show the video call button.
- if (mCallLogCache.isVideoEnabled() && canPlaceCallToNumber &&
- phoneCallDetailsViews.callTypeIcons.isVideoShown()) {
- videoCallButtonView.setTag(IntentProvider.getReturnVideoCallIntentProvider(number));
- videoCallButtonView.setVisibility(View.VISIBLE);
- } else {
- videoCallButtonView.setVisibility(View.GONE);
- }
-
- // For voicemail calls, show the voicemail playback layout; hide otherwise.
- if (callType == Calls.VOICEMAIL_TYPE && mVoicemailPlaybackPresenter != null
- && !TextUtils.isEmpty(voicemailUri)) {
- voicemailPlaybackView.setVisibility(View.VISIBLE);
-
- Uri uri = Uri.parse(voicemailUri);
- mVoicemailPlaybackPresenter.setPlaybackView(
- voicemailPlaybackView, uri, mVoicemailPrimaryActionButtonClicked);
- mVoicemailPrimaryActionButtonClicked = false;
- // Only mark voicemail as read when not in archive tab
- if (!isArchiveTab) {
- CallLogAsyncTaskUtil.markVoicemailAsRead(mContext, uri);
- }
- } else {
- voicemailPlaybackView.setVisibility(View.GONE);
- }
-
- if (callType == Calls.VOICEMAIL_TYPE) {
- detailsButtonView.setVisibility(View.GONE);
- } else {
- detailsButtonView.setVisibility(View.VISIBLE);
- detailsButtonView.setTag(
- IntentProvider.getCallDetailIntentProvider(rowId, callIds, null));
- }
-
- if (info != null && UriUtils.isEncodedContactUri(info.lookupUri)) {
- createNewContactButtonView.setTag(IntentProvider.getAddContactIntentProvider(
- info.lookupUri, info.name, info.number, info.type, true /* isNewContact */));
- createNewContactButtonView.setVisibility(View.VISIBLE);
-
- addToExistingContactButtonView.setTag(IntentProvider.getAddContactIntentProvider(
- info.lookupUri, info.name, info.number, info.type, false /* isNewContact */));
- addToExistingContactButtonView.setVisibility(View.VISIBLE);
- } else {
- createNewContactButtonView.setVisibility(View.GONE);
- addToExistingContactButtonView.setVisibility(View.GONE);
- }
-
- if (canPlaceCallToNumber) {
- sendMessageView.setTag(IntentProvider.getSendSmsIntentProvider(number));
- sendMessageView.setVisibility(View.VISIBLE);
- } else {
- sendMessageView.setVisibility(View.GONE);
- }
-
- mCallLogListItemHelper.setActionContentDescriptions(this);
-
- boolean supportsCallSubject =
- mCallLogCache.doesAccountSupportCallSubject(accountHandle);
- boolean isVoicemailNumber =
- mCallLogCache.isVoicemailNumber(accountHandle, number);
- callWithNoteButtonView.setVisibility(
- supportsCallSubject && !isVoicemailNumber ? View.VISIBLE : View.GONE);
-
- updateBlockReportActions();
- }
-
- /**
- * Show or hide the action views, such as voicemail, details, and add contact.
- *
- * If the action views have never been shown yet for this view, inflate the view stub.
- */
- public void showActions(boolean show) {
- showOrHideVoicemailTranscriptionView(show);
-
- if (show) {
- // Inflate the view stub if necessary, and wire up the event handlers.
- inflateActionViewStub();
-
- actionsView.setVisibility(View.VISIBLE);
- actionsView.setAlpha(1.0f);
- } else {
- // When recycling a view, it is possible the actionsView ViewStub was previously
- // inflated so we should hide it in this case.
- if (actionsView != null) {
- actionsView.setVisibility(View.GONE);
- }
- }
-
- updatePrimaryActionButton(show);
- }
-
- public void showOrHideVoicemailTranscriptionView(boolean isExpanded) {
- if (callType != Calls.VOICEMAIL_TYPE) {
- return;
- }
-
- final TextView view = phoneCallDetailsViews.voicemailTranscriptionView;
- if (!isExpanded || TextUtils.isEmpty(view.getText())) {
- view.setVisibility(View.GONE);
- return;
- }
- view.setVisibility(View.VISIBLE);
- }
-
- public void updatePhoto() {
- if (isSpamFeatureEnabled && isSpam) {
- quickContactView.setImageDrawable(
- mContext.getDrawable(R.drawable.blocked_contact));
- return;
- }
- quickContactView.assignContactUri(info.lookupUri);
-
- final boolean isVoicemail = mCallLogCache.isVoicemailNumber(accountHandle, number);
- int contactType = ContactPhotoManager.TYPE_DEFAULT;
- if (isVoicemail) {
- contactType = ContactPhotoManager.TYPE_VOICEMAIL;
- } else if (isBusiness) {
- contactType = ContactPhotoManager.TYPE_BUSINESS;
- }
-
- final String lookupKey = info.lookupUri != null
- ? UriUtils.getLookupKeyFromUri(info.lookupUri) : null;
- final String displayName = TextUtils.isEmpty(info.name) ? displayNumber : info.name;
- final DefaultImageRequest request = new DefaultImageRequest(
- displayName, lookupKey, contactType, true /* isCircular */);
-
- if (info.photoId == 0 && info.photoUri != null) {
- ContactPhotoManager.getInstance(mContext).loadPhoto(quickContactView, info.photoUri,
- mPhotoSize, false /* darkTheme */, true /* isCircular */, request);
- } else {
- ContactPhotoManager.getInstance(mContext).loadThumbnail(quickContactView, info.photoId,
- false /* darkTheme */, true /* isCircular */, request);
- }
- }
-
- @Override
- public void onClick(View view) {
- if (view.getId() == R.id.primary_action_button && !TextUtils.isEmpty(voicemailUri)) {
- mVoicemailPrimaryActionButtonClicked = true;
- mExpandCollapseListener.onClick(primaryActionView);
- } else if (view.getId() == R.id.call_with_note_action) {
- CallSubjectDialog.start(
- (Activity) mContext,
- info.photoId,
- info.photoUri,
- info.lookupUri,
- (String) nameOrNumber /* top line of contact view in call subject dialog */,
- isBusiness,
- number,
- TextUtils.isEmpty(info.name) ? null : displayNumber, /* second line of contact
- view in dialog. */
- numberType, /* phone number type (e.g. mobile) in second line of contact view */
- accountHandle);
- } else if (view.getId() == R.id.block_report_action) {
- maybeShowBlockNumberMigrationDialog(new BlockedNumbersMigrator.Listener() {
- @Override
- public void onComplete() {
- mBlockReportListener.onBlockReportSpam(
- displayNumber, number, countryIso, callType);
- }
- });
- } else if (view.getId() == R.id.block_action) {
- maybeShowBlockNumberMigrationDialog(new BlockedNumbersMigrator.Listener() {
- @Override
- public void onComplete() {
- mBlockReportListener.onBlock(displayNumber, number, countryIso, callType);
- }
- });
- } else if (view.getId() == R.id.unblock_action) {
- mBlockReportListener.onUnblock(
- displayNumber, number, countryIso, blockId, isSpam, callType);
- } else if (view.getId() == R.id.report_not_spam_action) {
- mBlockReportListener.onReportNotSpam(displayNumber, number, countryIso, callType);
- } else {
- final IntentProvider intentProvider = (IntentProvider) view.getTag();
- if (intentProvider != null) {
- final Intent intent = intentProvider.getIntent(mContext);
- // See IntentProvider.getCallDetailIntentProvider() for why this may be null.
- if (intent != null) {
- DialerUtils.startActivityWithErrorToast(mContext, intent);
- }
- }
- }
- }
-
- private void maybeShowBlockNumberMigrationDialog(BlockedNumbersMigrator.Listener listener) {
- if (!FilteredNumberCompat.maybeShowBlockNumberMigrationDialog(
- mContext.getContentResolver(),
- ((Activity) mContext).getFragmentManager(), listener)) {
- listener.onComplete();
- }
- }
-
- @NeededForTesting
- public static CallLogListItemViewHolder createForTest(Context context) {
- Resources resources = context.getResources();
- CallLogCache callLogCache =
- CallLogCache.getCallLogCache(context);
- PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
- context, resources, callLogCache);
-
- CallLogListItemViewHolder viewHolder = new CallLogListItemViewHolder(
- context,
- null,
- null /* expandCollapseListener */,
- callLogCache,
- new CallLogListItemHelper(phoneCallDetailsHelper, resources, callLogCache),
- null /* voicemailPlaybackPresenter */,
- null /* filteredNumberAsyncQueryHandler */,
- null /* filteredNumberDialogCallback */,
- new View(context),
- new QuickContactBadge(context),
- new View(context),
- PhoneCallDetailsViews.createForTest(context),
- new CardView(context),
- new TextView(context),
- new ImageView(context),
- false);
- viewHolder.detailsButtonView = new TextView(context);
- viewHolder.actionsView = new View(context);
- viewHolder.voicemailPlaybackView = new VoicemailPlaybackLayout(context);
- viewHolder.workIconView = new ImageButton(context);
- return viewHolder;
- }
-
- private void updateBlockReportActions() {
- if (!isSpamFeatureEnabled) {
- return;
- }
- // Set block/spam actions.
- blockReportView.setVisibility(View.GONE);
- blockView.setVisibility(View.GONE);
- unblockView.setVisibility(View.GONE);
- reportNotSpamView.setVisibility(View.GONE);
- boolean isBlocked = blockId != null;
- if (isBlocked) {
- unblockView.setVisibility(View.VISIBLE);
- } else {
- if (isSpam) {
- blockView.setVisibility(View.VISIBLE);
- reportNotSpamView.setVisibility(View.VISIBLE);
- } else {
- blockReportView.setVisibility(View.VISIBLE);
- }
- }
-
- }
-} \ No newline at end of file