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