194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng/*
294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Copyright (C) 2011 The Android Open Source Project
394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng *
494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License");
594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * you may not use this file except in compliance with the License.
694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * You may obtain a copy of the License at
794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng *
894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng *      http://www.apache.org/licenses/LICENSE-2.0
994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng *
1094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Unless required by applicable law or agreed to in writing, software
1194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS,
1294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * See the License for the specific language governing permissions and
1494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * limitations under the License.
1594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */
1694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
1794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengpackage com.android.dialer.calllog;
1894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
190927dc6ef623bec56415d087885f6d2607da35f7Andrew Leeimport android.content.Context;
2094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.res.Resources;
2194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.provider.CallLog.Calls;
2294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.text.TextUtils;
2394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
2492b0e2fc719f925d22d8d77f0b51bb897453c448Paul Soulosimport com.android.contacts.common.CallUtil;
2594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport com.android.dialer.PhoneCallDetails;
2694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport com.android.dialer.PhoneCallDetailsHelper;
279554500572ba82fbd7adb0a1637206ef870ef09eChiao Chengimport com.android.dialer.R;
2894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
2994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng/**
3094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Helper class to fill in the views of a call log entry.
3194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */
32fb585079cc4c522c27f6dd6bf03fd296535960f3Yorke Lee/* package */class CallLogListItemHelper {
3394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    /** Helper for populating the details of a phone call. */
3494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    private final PhoneCallDetailsHelper mPhoneCallDetailsHelper;
3594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    /** Helper for handling phone numbers. */
3624ec319f8d410be8a1923c4033f927165876cbabYorke Lee    private final PhoneNumberDisplayHelper mPhoneNumberHelper;
3794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    /** Resources to look up strings. */
3894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    private final Resources mResources;
3994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
4094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    /**
4194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng     * Creates a new helper instance.
4294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng     *
4394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng     * @param phoneCallDetailsHelper used to set the details of a phone call
4494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng     * @param phoneNumberHelper used to process phone number
4594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng     */
4694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    public CallLogListItemHelper(PhoneCallDetailsHelper phoneCallDetailsHelper,
4724ec319f8d410be8a1923c4033f927165876cbabYorke Lee            PhoneNumberDisplayHelper phoneNumberHelper, Resources resources) {
4894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        mPhoneCallDetailsHelper = phoneCallDetailsHelper;
4994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        mPhoneNumberHelper = phoneNumberHelper;
5094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        mResources = resources;
5194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
5294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
5394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    /**
5494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng     * Sets the name, label, and number for a contact.
5594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng     *
560927dc6ef623bec56415d087885f6d2607da35f7Andrew Lee     * @param context The application context.
5794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng     * @param views the views to populate
5894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng     * @param details the details of a phone call needed to fill in the data
5994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng     */
600927dc6ef623bec56415d087885f6d2607da35f7Andrew Lee    public void setPhoneCallDetails(
610927dc6ef623bec56415d087885f6d2607da35f7Andrew Lee            Context context, CallLogListItemViews views, PhoneCallDetails details) {
62d0715acdfc1aee0c20950741dc15d30abd18d2f2Tyler Gunn        mPhoneCallDetailsHelper.setPhoneCallDetails(views.phoneCallDetailsViews, details);
6394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
6445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        // Set the accessibility text for the contact badge
6545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        views.quickContactView.setContentDescription(getContactBadgeDescription(details));
6645ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
6745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        // Set the primary action accessibility description
680927dc6ef623bec56415d087885f6d2607da35f7Andrew Lee        views.primaryActionView.setContentDescription(getCallDescription(context, details));
6945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
70146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn        // Cache name or number of caller.  Used when setting the content descriptions of buttons
71146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn        // when the actions ViewStub is inflated.
72146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn        views.nameOrNumber = this.getNameOrNumber(details);
7394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
7494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
7545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    /**
76146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn     * Sets the accessibility descriptions for the action buttons in the action button ViewStub.
7745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     *
78146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn     * @param views The views associated with the current call log entry.
7945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     */
80146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn    public void setActionContentDescriptions(CallLogListItemViews views) {
81146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn        views.callBackButtonView.setContentDescription(
82146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn                mResources.getString(R.string.description_call_back_action, views.nameOrNumber));
83146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn
845619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn        views.videoCallButtonView.setContentDescription(
855619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn                mResources.getString(R.string.description_video_call_action, views.nameOrNumber));
865619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn
87146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn        views.voicemailButtonView.setContentDescription(
88146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn                mResources.getString(R.string.description_voicemail_action, views.nameOrNumber));
89146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn
90cf5e001120916deb770ea65ae55730e456f92137Tyler Gunn        views.detailsButtonView.setContentDescription(
91cf5e001120916deb770ea65ae55730e456f92137Tyler Gunn                mResources.getString(R.string.description_details_action, views.nameOrNumber));
9245ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    }
9345ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
9445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    /**
9545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * Returns the accessibility description for the contact badge for a call log entry.
9645ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     *
9745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * @param details Details of call.
9845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * @return Accessibility description.
9945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     */
10045ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    private CharSequence getContactBadgeDescription(PhoneCallDetails details) {
10145ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        return mResources.getString(R.string.description_contact_details, getNameOrNumber(details));
10294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
10394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
10445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    /**
10545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * Returns the accessibility description of the "return call/call" action for a call log
10645ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * entry.
10745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * Accessibility text is a combination of:
10845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * {Voicemail Prefix}. {Number of Calls}. {Caller information}.
10945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * If most recent call is a voicemail, {Voicemail Prefix} is "New Voicemail.", otherwise "".
11045ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     *
11145ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * If more than one call for the caller, {Number of Calls} is:
11245ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * "{number of calls} calls.", otherwise "".
11345ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     *
11445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * The {Caller Information} references the most recent call associated with the caller.
11545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * For incoming calls:
116146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn     * If missed call:  Missed call from {Name/Number} {Call Type} {Call Time}.
117146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn     * If answered call: Answered call from {Name/Number} {Call Type} {Call Time}.
11845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     *
11945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * For outgoing calls:
120146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn     * If outgoing:  Call to {Name/Number] {Call Type} {Call Time}.
12145ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     *
12245ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * Where:
12345ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * {Name/Number} is the name or number of the caller (as shown in call log).
12445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * {Call type} is the contact phone number type (eg mobile) or location.
12545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * {Call Time} is the time since the last call for the contact occurred.
12645ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     *
12745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * Examples:
128146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn     * 3 calls.  New Voicemail.  Missed call from Joe Smith mobile 2 hours ago.
129146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn     * 2 calls.  Answered call from John Doe mobile.  Last called 1 hour ago.
1300927dc6ef623bec56415d087885f6d2607da35f7Andrew Lee     *
1310927dc6ef623bec56415d087885f6d2607da35f7Andrew Lee     * @param context The application context.
13245ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * @param details Details of call.
13345ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * @return Return call action description.
13445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     */
1350927dc6ef623bec56415d087885f6d2607da35f7Andrew Lee    public CharSequence getCallDescription(Context context, PhoneCallDetails details) {
13645ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        int lastCallType = getLastCallType(details.callTypes);
13745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        boolean isVoiceMail = lastCallType == Calls.VOICEMAIL_TYPE;
13845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
13945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        // Get the name or number of the caller.
14045ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        final CharSequence nameOrNumber = getNameOrNumber(details);
14145ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
14245ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        // Get the call type or location of the caller; null if not applicable
14345ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        final CharSequence typeOrLocation = mPhoneCallDetailsHelper.getCallTypeOrLocation(details);
14445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
14545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        // Get the time/date of the call
14645ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        final CharSequence timeOfCall = mPhoneCallDetailsHelper.getCallDate(details);
14745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
14845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        StringBuilder callDescription = new StringBuilder();
14945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
15045ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        // Prepend the voicemail indication.
15145ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        if (isVoiceMail) {
15245ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn            callDescription.append(mResources.getString(R.string.description_new_voicemail));
15345ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        }
15445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
15545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        // Add number of calls if more than one.
15645ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        if (details.callTypes.length > 1) {
15745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn            callDescription.append(mResources.getString(R.string.description_num_calls,
15845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn                    details.callTypes.length));
15945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        }
16045ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
1615619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn        // If call had video capabilities, add the "Video Call" string.
162ca630af11785b88d0646bb8751b8b4af32fd2b76Andrew Lee        if ((details.features & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO &&
1630927dc6ef623bec56415d087885f6d2607da35f7Andrew Lee                CallUtil.isVideoEnabled(context)) {
1645619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn            callDescription.append(mResources.getString(R.string.description_video_call));
1655619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn        }
1665619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn
16745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        int stringID = getCallDescriptionStringID(details);
16845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
16945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        // Use chosen string resource to build up the message.
17045ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        callDescription.append(mResources.getString(stringID,
17145ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn                nameOrNumber,
17245ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn                // If no type or location can be determined, sub in empty string.
17345ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn                typeOrLocation == null ? "" : typeOrLocation,
17445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn                timeOfCall));
17545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
17645ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        return callDescription;
17745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    }
17845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
17945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    /**
18045ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * Determine the appropriate string ID to describe a call for accessibility purposes.
18145ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     *
18245ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * @param details Call details.
18345ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * @return String resource ID to use.
18445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     */
18545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    public int getCallDescriptionStringID(PhoneCallDetails details) {
18645ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        int lastCallType = getLastCallType(details.callTypes);
187146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn        int stringID;
188146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn
189146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn        if (lastCallType == Calls.VOICEMAIL_TYPE || lastCallType == Calls.MISSED_TYPE) {
190146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn            //Message: Missed call from <NameOrNumber>, <TypeOrLocation>, <TimeOfCall>.
191146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn            stringID = R.string.description_incoming_missed_call;
192146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn        } else if (lastCallType == Calls.INCOMING_TYPE) {
193146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn            //Message: Answered call from <NameOrNumber>, <TypeOrLocation>, <TimeOfCall>.
194146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn            stringID = R.string.description_incoming_answered_call;
19545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        } else {
196146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn            //Message: Call to <NameOrNumber>, <TypeOrLocation>, <TimeOfCall>.
197146a4cdf57f0d4d0cd85e808f1df2bdea639b24cTyler Gunn            stringID = R.string.description_outgoing_call;
19845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        }
19945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        return stringID;
20045ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    }
20145ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
20245ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    /**
20345ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * Determine the call type for the most recent call.
20445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * @param callTypes Call types to check.
20545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * @return Call type.
20645ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     */
20745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    private int getLastCallType(int[] callTypes) {
20845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        if (callTypes.length > 0) {
20945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn            return callTypes[0];
21045ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        } else {
21145ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn            return Calls.MISSED_TYPE;
21245ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        }
21345ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    }
21445ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn
21545ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    /**
21645ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * Return the name or number of the caller specified by the details.
21745ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * @param details Call details
21845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     * @return the name (if known) of the caller, otherwise the formatted number.
21945ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn     */
22045ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn    private CharSequence getNameOrNumber(PhoneCallDetails details) {
22194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        final CharSequence recipient;
22294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        if (!TextUtils.isEmpty(details.name)) {
22394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            recipient = details.name;
22494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        } else {
22594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            recipient = mPhoneNumberHelper.getDisplayNumber(
226719a7adde25e0a717816b00668c16c3a1e3c5518Jay Shrauner                    details.number, details.numberPresentation, details.formattedNumber);
22794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        }
22845ed3b5932ed590b45235d7b2befa736a95e7f75Tyler Gunn        return recipient;
22994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
23094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng}
231