1d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda/*
2d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda * Copyright (C) 2011 The Android Open Source Project
3d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda *
4d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda * Licensed under the Apache License, Version 2.0 (the "License");
5d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda * you may not use this file except in compliance with the License.
6d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda * You may obtain a copy of the License at
7d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda *
8d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda *      http://www.apache.org/licenses/LICENSE-2.0
9d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda *
10d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda * Unless required by applicable law or agreed to in writing, software
11d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda * distributed under the License is distributed on an "AS IS" BASIS,
12d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda * See the License for the specific language governing permissions and
14d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda * limitations under the License.
15d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda */
16d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda
17d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerdapackage com.android.contacts.calllog;
18d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda
199b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerdaimport android.content.res.Resources;
20d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerdaimport android.provider.CallLog.Calls;
217ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerdaimport android.text.TextUtils;
22d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerdaimport android.view.View;
23d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda
24e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.PhoneCallDetails;
25e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.PhoneCallDetailsHelper;
26e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R;
27e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng
28d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda/**
29d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda * Helper class to fill in the views of a call log entry.
30d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda */
31d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda/*package*/ class CallLogListItemHelper {
32371d5f97d0b87ea0c9d8e8e178c04df34336a29eFlavio Lerda    /** Helper for populating the details of a phone call. */
33371d5f97d0b87ea0c9d8e8e178c04df34336a29eFlavio Lerda    private final PhoneCallDetailsHelper mPhoneCallDetailsHelper;
34178eeebac88b352c131bd0315a99da16162c986eFlavio Lerda    /** Helper for handling phone numbers. */
35178eeebac88b352c131bd0315a99da16162c986eFlavio Lerda    private final PhoneNumberHelper mPhoneNumberHelper;
369b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda    /** Resources to look up strings. */
379b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda    private final Resources mResources;
38d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda
39d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda    /**
40d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda     * Creates a new helper instance.
41d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda     *
42371d5f97d0b87ea0c9d8e8e178c04df34336a29eFlavio Lerda     * @param phoneCallDetailsHelper used to set the details of a phone call
43a113689156ac38177fb8fdf82e5327c3f916d331Flavio Lerda     * @param phoneNumberHelper used to process phone number
44d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda     */
45371d5f97d0b87ea0c9d8e8e178c04df34336a29eFlavio Lerda    public CallLogListItemHelper(PhoneCallDetailsHelper phoneCallDetailsHelper,
469b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda            PhoneNumberHelper phoneNumberHelper, Resources resources) {
47371d5f97d0b87ea0c9d8e8e178c04df34336a29eFlavio Lerda        mPhoneCallDetailsHelper = phoneCallDetailsHelper;
48fadd5e1f1845b8d98e247bbd30535928dc5e0f81Daisuke Miyakawa        mPhoneNumberHelper = phoneNumberHelper;
499b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda        mResources = resources;
50d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda    }
51d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda
52d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda    /**
53d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda     * Sets the name, label, and number for a contact.
54d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda     *
55d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda     * @param views the views to populate
56371d5f97d0b87ea0c9d8e8e178c04df34336a29eFlavio Lerda     * @param details the details of a phone call needed to fill in the data
5776921903290ba9229e0238395c35569cbadecb20Flavio Lerda     * @param isHighlighted whether to use the highlight text for the call
58d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda     */
59371d5f97d0b87ea0c9d8e8e178c04df34336a29eFlavio Lerda    public void setPhoneCallDetails(CallLogListItemViews views, PhoneCallDetails details,
60fe17026100674b204f3b4fc6cb5a61f51ac99ec6Flavio Lerda            boolean isHighlighted) {
61fe17026100674b204f3b4fc6cb5a61f51ac99ec6Flavio Lerda        mPhoneCallDetailsHelper.setPhoneCallDetails(views.phoneCallDetailsViews, details,
62b88abaaf3e733a9daf681277b7e5e8e58c015462Flavio Lerda                isHighlighted);
63405695664582b4989cffcf054bf1aceb83dec437Flavio Lerda        boolean canCall = mPhoneNumberHelper.canPlaceCallsTo(details.number);
64405695664582b4989cffcf054bf1aceb83dec437Flavio Lerda        boolean canPlay = details.callTypes[0] == Calls.VOICEMAIL_TYPE;
6533b28a1fc0e8ca5c2c285655d0ed8bd0dc275600Flavio Lerda
66405695664582b4989cffcf054bf1aceb83dec437Flavio Lerda        if (canPlay) {
67405695664582b4989cffcf054bf1aceb83dec437Flavio Lerda            // Playback action takes preference.
6876821d02351701b3829aa5754dd9a86e417f635fFlavio Lerda            configurePlaySecondaryAction(views, isHighlighted);
69405695664582b4989cffcf054bf1aceb83dec437Flavio Lerda            views.dividerView.setVisibility(View.VISIBLE);
70405695664582b4989cffcf054bf1aceb83dec437Flavio Lerda        } else if (canCall) {
719b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda            // Call is the secondary action.
727ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda            configureCallSecondaryAction(views, details);
7333b28a1fc0e8ca5c2c285655d0ed8bd0dc275600Flavio Lerda            views.dividerView.setVisibility(View.VISIBLE);
7433b28a1fc0e8ca5c2c285655d0ed8bd0dc275600Flavio Lerda        } else {
75405695664582b4989cffcf054bf1aceb83dec437Flavio Lerda            // No action available.
769b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda            views.secondaryActionView.setVisibility(View.GONE);
7733b28a1fc0e8ca5c2c285655d0ed8bd0dc275600Flavio Lerda            views.dividerView.setVisibility(View.GONE);
7833b28a1fc0e8ca5c2c285655d0ed8bd0dc275600Flavio Lerda        }
79d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda    }
809b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda
819b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda    /** Sets the secondary action to correspond to the call button. */
827ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda    private void configureCallSecondaryAction(CallLogListItemViews views,
837ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda            PhoneCallDetails details) {
849b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda        views.secondaryActionView.setVisibility(View.VISIBLE);
859b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda        views.secondaryActionView.setImageResource(R.drawable.ic_ab_dialer_holo_dark);
867ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda        views.secondaryActionView.setContentDescription(getCallActionDescription(details));
877ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda    }
887ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda
897ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda    /** Returns the description used by the call action for this phone call. */
907ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda    private CharSequence getCallActionDescription(PhoneCallDetails details) {
917ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda        final CharSequence recipient;
927ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda        if (!TextUtils.isEmpty(details.name)) {
937ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda            recipient = details.name;
947ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda        } else {
957ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda            recipient = mPhoneNumberHelper.getDisplayNumber(
967ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda                    details.number, details.formattedNumber);
977ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda        }
987ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerda        return mResources.getString(R.string.description_call, recipient);
999b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda    }
1009b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda
1019b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda    /** Sets the secondary action to correspond to the play button. */
10276821d02351701b3829aa5754dd9a86e417f635fFlavio Lerda    private void configurePlaySecondaryAction(CallLogListItemViews views, boolean isHighlighted) {
1039b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda        views.secondaryActionView.setVisibility(View.VISIBLE);
10476821d02351701b3829aa5754dd9a86e417f635fFlavio Lerda        views.secondaryActionView.setImageResource(
10576821d02351701b3829aa5754dd9a86e417f635fFlavio Lerda                isHighlighted ? R.drawable.ic_play_active_holo_dark : R.drawable.ic_play_holo_dark);
1069b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda        views.secondaryActionView.setContentDescription(
1079b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda                mResources.getString(R.string.description_call_log_play_button));
1089b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerda    }
109d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda}
110