1d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian/* 2d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Copyright (C) 2017 The Android Open Source Project 3d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 4d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Licensed under the Apache License, Version 2.0 (the "License"); 5d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * you may not use this file except in compliance with the License. 6d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * You may obtain a copy of the License at 7d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 8d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * http://www.apache.org/licenses/LICENSE-2.0 9d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 10d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Unless required by applicable law or agreed to in writing, software 11d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * distributed under the License is distributed on an "AS IS" BASIS, 12d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * See the License for the specific language governing permissions and 14d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * limitations under the License. 15d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 16d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 17d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianpackage com.android.dialer.calldetails; 18d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 19d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.content.Context; 20d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.content.Intent; 21d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.support.v7.widget.RecyclerView; 228369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanianimport android.text.TextUtils; 23d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.view.View; 24d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.view.View.OnClickListener; 25a0df9f7f52b4d7f926581f30bd0a7774a6abac43Zachary Heidepriemimport com.android.dialer.clipboard.ClipboardUtils; 26d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport com.android.dialer.common.Assert; 278369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanianimport com.android.dialer.logging.DialerImpression; 28d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport com.android.dialer.logging.Logger; 292ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanianimport com.android.dialer.logging.UiAction; 302ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanianimport com.android.dialer.performancereport.PerformanceReport; 31d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport com.android.dialer.util.CallUtil; 32d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport com.android.dialer.util.DialerUtils; 33d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 34d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian/** ViewHolder container for {@link CallDetailsActivity} footer. */ 352ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanianfinal class CallDetailsFooterViewHolder extends RecyclerView.ViewHolder implements OnClickListener { 36d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 377ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh private final ReportCallIdListener reportCallIdListener; 387ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh private final DeleteCallDetailsListener deleteCallDetailsListener; 39d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final View copy; 40d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final View edit; 412ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian private final View reportCallerId; 427ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh private final View delete; 43d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 44d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private String number; 45d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 467ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh CallDetailsFooterViewHolder( 477ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh View view, 487ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh ReportCallIdListener reportCallIdListener, 497ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh DeleteCallDetailsListener deleteCallDetailsListener) { 50d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian super(view); 517ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh this.reportCallIdListener = reportCallIdListener; 527ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh this.deleteCallDetailsListener = deleteCallDetailsListener; 53d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian copy = view.findViewById(R.id.call_detail_action_copy); 54d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian edit = view.findViewById(R.id.call_detail_action_edit_before_call); 552ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian reportCallerId = view.findViewById(R.id.call_detail_action_report_caller_id); 567ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh delete = view.findViewById(R.id.call_detail_action_delete); 57d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian copy.setOnClickListener(this); 58d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian edit.setOnClickListener(this); 592ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian reportCallerId.setOnClickListener(this); 607ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh delete.setOnClickListener(this); 61d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 62d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 63d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public void setPhoneNumber(String number) { 64d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian this.number = number; 658369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian if (TextUtils.isEmpty(number)) { 6654e90e5c61b563a432ad70066505f08b352837c3roldenburg copy.setVisibility(View.GONE); 6754e90e5c61b563a432ad70066505f08b352837c3roldenburg edit.setVisibility(View.GONE); 687ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh } else if (reportCallIdListener.canReportCallerId(number)) { 692ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian reportCallerId.setVisibility(View.VISIBLE); 708369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian } 71d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 72d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 73d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian @Override 74d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public void onClick(View view) { 75d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Context context = view.getContext(); 76d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian if (view == copy) { 772ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian PerformanceReport.recordClick(UiAction.Type.COPY_NUMBER_IN_CALL_DETAIL); 782ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian 79d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Logger.get(context).logImpression(DialerImpression.Type.CALL_DETAILS_COPY_NUMBER); 80d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian ClipboardUtils.copyText(context, null, number, true); 81d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } else if (view == edit) { 822ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian PerformanceReport.recordClick(UiAction.Type.EDIT_NUMBER_BEFORE_CALL_IN_CALL_DETAIL); 832ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian // Dialpad will be filled with this number, but we don't want to record it as user action 842ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian PerformanceReport.setIgnoreActionOnce(UiAction.Type.TEXT_CHANGE_WITH_INPUT); 852ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian 86d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Logger.get(context).logImpression(DialerImpression.Type.CALL_DETAILS_EDIT_BEFORE_CALL); 87d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Intent dialIntent = new Intent(Intent.ACTION_DIAL, CallUtil.getCallUri(number)); 88d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian DialerUtils.startActivityWithErrorToast(context, dialIntent); 892ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian } else if (view == reportCallerId) { 907ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh reportCallIdListener.reportCallId(number); 917ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh } else if (view == delete) { 927ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh deleteCallDetailsListener.delete(); 93d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } else { 94d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Assert.fail("View on click not implemented: " + view); 95d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 96d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 972ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian 982ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian /** Listener for reporting caller id */ 992ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian interface ReportCallIdListener { 1002ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian 1012ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian /** Tell listener that the user requested to report caller id info as inaccurate. */ 1022ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian void reportCallId(String number); 1032ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian 1042ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian /** returns true if the number can be reported as inaccurate. */ 1052ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian boolean canReportCallerId(String number); 1062ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian } 1077ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh 1087ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh /** Listener for deleting call details */ 1097ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh interface DeleteCallDetailsListener { 1107ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh 1117ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh /** Delete call details */ 1127ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh void delete(); 1137ba72d2d5b4061cf55d5440d4434a660c9108d2elinyuh } 114d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian} 115