17d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/* 27d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Copyright (C) 2013 The Android Open Source Project 37d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 47d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Licensed under the Apache License, Version 2.0 (the "License"); 57d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * you may not use this file except in compliance with the License. 67d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * You may obtain a copy of the License at 77d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 87d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * http://www.apache.org/licenses/LICENSE-2.0 97d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Unless required by applicable law or agreed to in writing, software 117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * distributed under the License is distributed on an "AS IS" BASIS, 127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * See the License for the specific language governing permissions and 147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * limitations under the License. 157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpackage com.android.phone; 187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.CallerInfo; 207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.Connection; 217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.Phone; 227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.PhoneConstants; 237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.TelephonyCapabilities; 247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.phone.common.CallLogAsync; 257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.net.Uri; 277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.SystemProperties; 287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.provider.CallLog.Calls; 290b35f04f2e58095d7292468c746d992913965eeaAnders Kristensenimport android.telephony.DisconnectCause; 307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.telephony.PhoneNumberUtils; 317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.text.TextUtils; 327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.util.Log; 337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/** 357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Helper class for interacting with the call log. 367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonclass CallLogger { 387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String LOG_TAG = CallLogger.class.getSimpleName(); 397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 1) && 407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon (SystemProperties.getInt("ro.debuggable", 0) == 1); 417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final boolean VDBG = (PhoneGlobals.DBG_LEVEL >= 2); 427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private PhoneGlobals mApplication; 447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private CallLogAsync mCallLog; 457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public CallLogger(PhoneGlobals application, CallLogAsync callLogAsync) { 477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mApplication = application; 487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mCallLog = callLogAsync; 497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Logs a call to the call log based on the connection object passed in. 537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @param c The connection object for the call being logged. 557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @param callLogType The type of call log entry. 567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void logCall(Connection c, int callLogType) { 587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final String number = c.getAddress(); 597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final long date = c.getCreateTime(); 607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final long duration = c.getDurationMillis(); 617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final Phone phone = c.getCall().getPhone(); 627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final CallerInfo ci = getCallerInfoFromConnection(c); // May be null. 647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final String logNumber = getLogNumber(c, ci); 657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) { 677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon log("- onDisconnect(): logNumber set to:" + PhoneUtils.toLogSafePhoneNumber(logNumber) + 687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon ", number set to: " + PhoneUtils.toLogSafePhoneNumber(number)); 697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // TODO: In getLogNumber we use the presentation from 727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // the connection for the CNAP. Should we use the one 737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // below instead? (comes from caller info) 747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // For international calls, 011 needs to be logged as + 767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final int presentation = getPresentation(c, ci); 777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final boolean isOtaspNumber = TelephonyCapabilities.supportsOtasp(phone) 797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon && phone.isOtaSpNumber(number); 807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // Don't log OTASP calls. 827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (!isOtaspNumber) { 837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon logCall(ci, logNumber, presentation, callLogType, date, duration); 847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Came as logCall(Connection,int) but calculates the call type from the connection object. 897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void logCall(Connection c) { 910b35f04f2e58095d7292468c746d992913965eeaAnders Kristensen final int cause = c.getDisconnectCause(); 927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // Set the "type" to be displayed in the call log (see constants in CallLog.Calls) 947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final int callLogType; 957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (c.isIncoming()) { 970b35f04f2e58095d7292468c746d992913965eeaAnders Kristensen callLogType = (cause == DisconnectCause.INCOMING_MISSED ? 987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Calls.MISSED_TYPE : Calls.INCOMING_TYPE); 997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 1007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon callLogType = Calls.OUTGOING_TYPE; 1017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (VDBG) log("- callLogType: " + callLogType + ", UserData: " + c.getUserData()); 1037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon logCall(c, callLogType); 1057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 1087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Logs a call to the call from the parameters passed in. 1097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 1107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void logCall(CallerInfo ci, String number, int presentation, int callType, long start, 1117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon long duration) { 1129c3b22b8e0a83fa547740d40cbc6995b809cf51dYorke Lee // no-op 1137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 1167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Get the caller info. 1177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 1187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @param conn The phone connection. 1197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @return The CallerInfo associated with the connection. Maybe null. 1207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 1217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private CallerInfo getCallerInfoFromConnection(Connection conn) { 1227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon CallerInfo ci = null; 1237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Object o = conn.getUserData(); 1247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if ((o == null) || (o instanceof CallerInfo)) { 1267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon ci = (CallerInfo) o; 1277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else if (o instanceof Uri) { 1287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon ci = CallerInfo.getCallerInfo(mApplication.getApplicationContext(), (Uri) o); 1297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 1307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon ci = ((PhoneUtils.CallerInfoToken) o).currentInfo; 1317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return ci; 1337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 1367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Retrieve the phone number from the caller info or the connection. 1377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 1387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * For incoming call the number is in the Connection object. For 1397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * outgoing call we use the CallerInfo phoneNumber field if 1407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * present. All the processing should have been done already (CDMA vs GSM numbers). 1417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 1427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * If CallerInfo is missing the phone number, get it from the connection. 1437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Apply the Call Name Presentation (CNAP) transform in the connection on the number. 1447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 1457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @param conn The phone connection. 1467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @param callerInfo The CallerInfo. Maybe null. 1477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @return the phone number. 1487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 1497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private String getLogNumber(Connection conn, CallerInfo callerInfo) { 1507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon String number = null; 1517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (conn.isIncoming()) { 1537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon number = conn.getAddress(); 1547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 1557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // For emergency and voicemail calls, 1567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // CallerInfo.phoneNumber does *not* contain a valid phone 1577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // number. Instead it contains an I18N'd string such as 1587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // "Emergency Number" or "Voice Mail" so we get the number 1597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // from the connection. 1607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (null == callerInfo || TextUtils.isEmpty(callerInfo.phoneNumber) || 1617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon callerInfo.isEmergencyNumber() || callerInfo.isVoiceMailNumber()) { 1627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (conn.getCall().getPhone().getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA) { 1637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // In cdma getAddress() is not always equals to getOrigDialString(). 1647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon number = conn.getOrigDialString(); 1657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 1667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon number = conn.getAddress(); 1677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 1697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon number = callerInfo.phoneNumber; 1707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (null == number) { 1747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return null; 1757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 1767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon int presentation = conn.getNumberPresentation(); 1777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // Do final CNAP modifications. 1797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon String newNumber = PhoneUtils.modifyForSpecialCnapCases(mApplication, callerInfo, 1807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon number, presentation); 1817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (!PhoneNumberUtils.isUriNumber(number)) { 1837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon number = PhoneNumberUtils.stripSeparators(number); 1847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (VDBG) log("getLogNumber: " + number); 1867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return number; 1877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 1917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Get the presentation from the callerinfo if not null otherwise, 1927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * get it from the connection. 1937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 1947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @param conn The phone connection. 1957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @param callerInfo The CallerInfo. Maybe null. 1967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @return The presentation to use in the logs. 1977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 1987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private int getPresentation(Connection conn, CallerInfo callerInfo) { 1997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon int presentation; 2007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (null == callerInfo) { 2027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon presentation = conn.getNumberPresentation(); 2037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 2047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon presentation = callerInfo.numberPresentation; 2057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("- getPresentation(): ignoring connection's presentation: " + 2067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon conn.getNumberPresentation()); 2077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("- getPresentation: presentation: " + presentation); 2097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return presentation; 2107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void log(String msg) { 2137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Log.d(LOG_TAG, msg); 2147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon} 216