CallDetailsFooterViewHolder.java revision a0df9f7f52b4d7f926581f30bd0a7774a6abac43
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 372ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian private final ReportCallIdListener listener; 388369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian private final View container; 39d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final View copy; 40d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final View edit; 412ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian private final View reportCallerId; 42d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 43d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private String number; 44d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 452ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian CallDetailsFooterViewHolder(View view, ReportCallIdListener listener) { 46d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian super(view); 472ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian this.listener = listener; 488369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian container = view.findViewById(R.id.footer_container); 49d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian copy = view.findViewById(R.id.call_detail_action_copy); 50d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian edit = view.findViewById(R.id.call_detail_action_edit_before_call); 512ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian reportCallerId = view.findViewById(R.id.call_detail_action_report_caller_id); 52d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 53d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian copy.setOnClickListener(this); 54d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian edit.setOnClickListener(this); 552ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian reportCallerId.setOnClickListener(this); 56d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 57d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 58d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public void setPhoneNumber(String number) { 59d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian this.number = number; 608369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian if (TextUtils.isEmpty(number)) { 618369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian container.setVisibility(View.GONE); 622ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian } else if (listener.canReportCallerId(number)) { 632ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian reportCallerId.setVisibility(View.VISIBLE); 648369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian } 65d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 66d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 67d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian @Override 68d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public void onClick(View view) { 69d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Context context = view.getContext(); 70d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian if (view == copy) { 712ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian PerformanceReport.recordClick(UiAction.Type.COPY_NUMBER_IN_CALL_DETAIL); 722ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian 73d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Logger.get(context).logImpression(DialerImpression.Type.CALL_DETAILS_COPY_NUMBER); 74d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian ClipboardUtils.copyText(context, null, number, true); 75d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } else if (view == edit) { 762ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian PerformanceReport.recordClick(UiAction.Type.EDIT_NUMBER_BEFORE_CALL_IN_CALL_DETAIL); 772ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian // Dialpad will be filled with this number, but we don't want to record it as user action 782ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian PerformanceReport.setIgnoreActionOnce(UiAction.Type.TEXT_CHANGE_WITH_INPUT); 792ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian 80d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Logger.get(context).logImpression(DialerImpression.Type.CALL_DETAILS_EDIT_BEFORE_CALL); 81d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Intent dialIntent = new Intent(Intent.ACTION_DIAL, CallUtil.getCallUri(number)); 82d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian DialerUtils.startActivityWithErrorToast(context, dialIntent); 832ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian } else if (view == reportCallerId) { 842ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian listener.reportCallId(number); 85d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } else { 86d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Assert.fail("View on click not implemented: " + view); 87d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 88d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 892ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian 902ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian /** Listener for reporting caller id */ 912ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian interface ReportCallIdListener { 922ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian 932ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian /** Tell listener that the user requested to report caller id info as inaccurate. */ 942ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian void reportCallId(String number); 952ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian 962ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian /** returns true if the number can be reported as inaccurate. */ 972ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian boolean canReportCallerId(String number); 982ca4318cc1ee57dda907ba2069bd61d162b1baefEric Erfanian } 99d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian} 100