1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.dialer.calllog;
18 
19 import android.content.Context;
20 import android.telecom.PhoneAccountHandle;
21 import android.view.View;
22 import android.widget.QuickContactBadge;
23 import android.widget.TextView;
24 
25 import com.android.contacts.common.testing.NeededForTesting;
26 import com.android.dialer.PhoneCallDetailsViews;
27 import com.android.dialer.R;
28 
29 /**
30  * Simple value object containing the various views within a call log entry.
31  */
32 public final class CallLogListItemViews {
33     /** The quick contact badge for the contact. */
34     public final QuickContactBadge quickContactView;
35     /** The primary action view of the entry. */
36     public final View primaryActionView;
37     /** The details of the phone call. */
38     public final PhoneCallDetailsViews phoneCallDetailsViews;
39     /** The text of the header for a day grouping. */
40     public final TextView dayGroupHeader;
41     /** The view containing the details for the call log row, including the action buttons. */
42     public final View callLogEntryView;
43     /** The view containing call log item actions.  Null until the ViewStub is inflated. */
44     public View actionsView;
45     /** The "call back" action button - assigned only when the action section is expanded. */
46     public TextView callBackButtonView;
47     /** The "video call" action button - assigned only when the action section is expanded. */
48     public TextView videoCallButtonView;
49     /** The "voicemail" action button - assigned only when the action section is expanded. */
50     public TextView voicemailButtonView;
51     /** The "details" action button - assigned only when the action section is expanded. */
52     public TextView detailsButtonView;
53     /** The "report" action button. */
54     public TextView reportButtonView;
55 
56     /**
57      * The row Id for the first call associated with the call log entry.  Used as a key for the
58      * map used to track which call log entries have the action button section expanded.
59      */
60     public long rowId;
61 
62     /**
63      * The call Ids for the calls represented by the current call log entry.  Used when the user
64      * deletes a call log entry.
65      */
66     public long[] callIds;
67 
68     /**
69      * The callable phone number for the current call log entry.  Cached here as the call back
70      * intent is set only when the actions ViewStub is inflated.
71      */
72     public String number;
73 
74     /**
75      * The phone number presentation for the current call log entry.  Cached here as the call back
76      * intent is set only when the actions ViewStub is inflated.
77      */
78     public int numberPresentation;
79 
80     /**
81      * The type of call for the current call log entry.  Cached here as the call back
82      * intent is set only when the actions ViewStub is inflated.
83      */
84     public int callType;
85 
86     /**
87      * The account for the current call log entry.  Cached here as the call back
88      * intent is set only when the actions ViewStub is inflated.
89      */
90     public PhoneAccountHandle accountHandle;
91 
92     /**
93      * If the call has an associated voicemail message, the URI of the voicemail message for
94      * playback.  Cached here as the voicemail intent is only set when the actions ViewStub is
95      * inflated.
96      */
97     public String voicemailUri;
98 
99     /**
100      * The name or number associated with the call.  Cached here for use when setting content
101      * descriptions on buttons in the actions ViewStub when it is inflated.
102      */
103     public CharSequence nameOrNumber;
104 
105     /**
106      * Whether or not the item has been reported by user as incorrect.
107      */
108     public boolean reported;
109 
110     /**
111      * Whether or not the contact info can be marked as invalid from the source where
112      * it was obtained.
113      */
114     public boolean canBeReportedAsInvalid;
115 
CallLogListItemViews(QuickContactBadge quickContactView, View primaryActionView, PhoneCallDetailsViews phoneCallDetailsViews, View callLogEntryView, TextView dayGroupHeader)116     private CallLogListItemViews(QuickContactBadge quickContactView, View primaryActionView,
117             PhoneCallDetailsViews phoneCallDetailsViews, View callLogEntryView,
118             TextView dayGroupHeader) {
119         this.quickContactView = quickContactView;
120         this.primaryActionView = primaryActionView;
121         this.phoneCallDetailsViews = phoneCallDetailsViews;
122         this.callLogEntryView = callLogEntryView;
123         this.dayGroupHeader = dayGroupHeader;
124     }
125 
fromView(View view)126     public static CallLogListItemViews fromView(View view) {
127         return new CallLogListItemViews(
128                 (QuickContactBadge) view.findViewById(R.id.quick_contact_photo),
129                 view.findViewById(R.id.primary_action_view),
130                 PhoneCallDetailsViews.fromView(view),
131                 view.findViewById(R.id.call_log_row),
132                 (TextView) view.findViewById(R.id.call_log_day_group_label));
133     }
134 
135     @NeededForTesting
createForTest(Context context)136     public static CallLogListItemViews createForTest(Context context) {
137         CallLogListItemViews views = new CallLogListItemViews(
138                 new QuickContactBadge(context),
139                 new View(context),
140                 PhoneCallDetailsViews.createForTest(context),
141                 new View(context),
142                 new TextView(context));
143         views.callBackButtonView = new TextView(context);
144         views.voicemailButtonView = new TextView(context);
145         views.detailsButtonView = new TextView(context);
146         views.reportButtonView = new TextView(context);
147         views.actionsView = new View(context);
148         return views;
149     }
150 }
151