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 19371d5f97d0b87ea0c9d8e8e178c04df34336a29eFlavio Lerdaimport com.android.contacts.PhoneCallDetails; 20371d5f97d0b87ea0c9d8e8e178c04df34336a29eFlavio Lerdaimport com.android.contacts.PhoneCallDetailsHelper; 219b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerdaimport com.android.contacts.R; 22d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda 239b81f1d888772086e49fa39bfa3304f9e072614cFlavio Lerdaimport android.content.res.Resources; 24d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerdaimport android.provider.CallLog.Calls; 257ecd4db75649634acddc42b64f6bf933d2f37a44Flavio Lerdaimport android.text.TextUtils; 26d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerdaimport android.view.View; 27d2031e0c809580219faa55a27c237c7bdf8505a5Flavio Lerda 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