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