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