Connection.java revision 0825495a331bb44df395a0cdb79fab85e68db5d5
10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.util.Log;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide}
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic abstract class Connection {
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //Caller Name Display
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected String cnapName;
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected int cnapNamePresentation  = PhoneConstants.PRESENTATION_ALLOWED;
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static String LOG_TAG = "TelephonyConnection";
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public enum DisconnectCause {
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        NOT_DISCONNECTED,               /* has not yet disconnected */
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        INCOMING_MISSED,                /* an incoming call that was missed and never answered */
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        NORMAL,                         /* normal; remote */
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        LOCAL,                          /* normal; local hangup */
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BUSY,                           /* outgoing call to busy line */
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CONGESTION,                     /* outgoing call to congested network */
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        MMI,                            /* not presently used; dial() returns null */
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        INVALID_NUMBER,                 /* invalid dial string */
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        NUMBER_UNREACHABLE,             /* cannot reach the peer */
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SERVER_UNREACHABLE,             /* cannot reach the server */
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        INVALID_CREDENTIALS,            /* invalid credentials */
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        OUT_OF_NETWORK,                 /* calling from out of network is not allowed */
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SERVER_ERROR,                   /* server error */
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        TIMED_OUT,                      /* client timed out */
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        LOST_SIGNAL,
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        LIMIT_EXCEEDED,                 /* eg GSM ACM limit exceeded */
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        INCOMING_REJECTED,              /* an incoming call that was rejected */
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        POWER_OFF,                      /* radio is turned off explicitly */
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        OUT_OF_SERVICE,                 /* out of service */
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ICC_ERROR,                      /* No ICC, ICC locked, or other ICC error */
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CALL_BARRED,                    /* call was blocked by call barring */
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        FDN_BLOCKED,                    /* call was blocked by fixed dial number */
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CS_RESTRICTED,                  /* call was blocked by restricted all voice access */
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CS_RESTRICTED_NORMAL,           /* call was blocked by restricted normal voice access */
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CS_RESTRICTED_EMERGENCY,        /* call was blocked by restricted emergency voice access */
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UNOBTAINABLE_NUMBER,            /* Unassigned number (3GPP TS 24.008 table 10.5.123) */
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CDMA_LOCKED_UNTIL_POWER_CYCLE,  /* MS is locked until next power cycle */
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CDMA_DROP,
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CDMA_INTERCEPT,                 /* INTERCEPT order received, MS state idle entered */
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CDMA_REORDER,                   /* MS has been redirected, call is cancelled */
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CDMA_SO_REJECT,                 /* service option rejection */
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CDMA_RETRY_ORDER,               /* requested service is rejected, retry delay is set */
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CDMA_ACCESS_FAILURE,
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CDMA_PREEMPTED,
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CDMA_NOT_EMERGENCY,              /* not an emergency call */
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CDMA_ACCESS_BLOCKED,            /* Access Blocked by CDMA network */
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ERROR_UNSPECIFIED
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    Object userData;
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /* Instance Methods */
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Gets address (e.g. phone number) associated with connection.
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * TODO: distinguish reasons for unavailability
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return address or null if unavailable
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract String getAddress();
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Gets CNAP name associated with connection.
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return cnap name or null if unavailable
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String getCnapName() {
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return cnapName;
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Get original dial string.
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return original dial string or null if unavailable
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String getOrigDialString(){
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Gets CNAP presentation associated with connection.
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return cnap name or null if unavailable
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int getCnapNamePresentation() {
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       return cnapNamePresentation;
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    };
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return Call that owns this Connection, or null if none
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract Call getCall();
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Connection create time in currentTimeMillis() format
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Basically, set when object is created.
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Effectively, when an incoming call starts ringing or an
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * outgoing call starts dialing
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract long getCreateTime();
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Connection connect time in currentTimeMillis() format.
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * For outgoing calls: Begins at (DIALING|ALERTING) -> ACTIVE transition.
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * For incoming calls: Begins at (INCOMING|WAITING) -> ACTIVE transition.
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns 0 before then.
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract long getConnectTime();
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Disconnect time in currentTimeMillis() format.
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * The time when this Connection makes a transition into ENDED or FAIL.
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns 0 before then.
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract long getDisconnectTime();
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns the number of milliseconds the call has been connected,
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * or 0 if the call has never connected.
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * If the call is still connected, then returns the elapsed
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * time since connect.
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract long getDurationMillis();
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * If this connection is HOLDING, return the number of milliseconds
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * that it has been on hold for (approximately).
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * If this connection is in any other state, return 0.
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract long getHoldDurationMillis();
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns "NOT_DISCONNECTED" if not yet disconnected.
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract DisconnectCause getDisconnectCause();
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns true of this connection originated elsewhere
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * ("MT" or mobile terminated; another party called this terminal)
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * or false if this call originated here (MO or mobile originated).
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract boolean isIncoming();
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * If this Connection is connected, then it is associated with
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * a Call.
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns getCall().getState() or Call.State.IDLE if not
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * connected
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public Call.State getState() {
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Call c;
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        c = getCall();
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (c == null) {
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return Call.State.IDLE;
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return c.getState();
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * isAlive()
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return true if the connection isn't disconnected
1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * (could be active, holding, ringing, dialing, etc)
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    isAlive() {
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return getState().isAlive();
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns true if Connection is connected and is INCOMING or WAITING
1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean
2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    isRinging() {
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return getState().isRinging();
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return the userdata set in setUserData()
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public Object getUserData() {
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return userData;
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param userdata user can store an any userdata in the Connection object.
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setUserData(Object userdata) {
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        this.userData = userdata;
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Hangup individual Connection
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract void hangup() throws CallStateException;
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Separate this call from its owner Call and assigns it to a new Call
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * (eg if it is currently part of a Conference call
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * TODO: Throw exception? Does GSM require error display on failure here?
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract void separate() throws CallStateException;
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public enum PostDialState {
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        NOT_STARTED,    /* The post dial string playback hasn't
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                           been started, or this call is not yet
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                           connected, or this is an incoming call */
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        STARTED,        /* The post dial string playback has begun */
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        WAIT,           /* The post dial string playback is waiting for a
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                           call to proceedAfterWaitChar() */
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        WILD,           /* The post dial string playback is waiting for a
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                           call to proceedAfterWildChar() */
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        COMPLETE,       /* The post dial string playback is complete */
2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CANCELLED,       /* The post dial string playback was cancelled
2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                           with cancelPostDial() */
2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        PAUSE           /* The post dial string playback is pausing for a
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                           call to processNextPostDialChar*/
2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void clearUserData(){
2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData = null;
2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract PostDialState getPostDialState();
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns the portion of the post dial string that has not
2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * yet been dialed, or "" if none
2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract String getRemainingPostDialString();
2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * See Phone.setOnPostDialWaitCharacter()
2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract void proceedAfterWaitChar();
2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * See Phone.setOnPostDialWildCharacter()
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract void proceedAfterWildChar(String str);
2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Cancel any post
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract void cancelPostDial();
2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns the caller id presentation type for incoming and waiting calls
2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return one of PRESENTATION_*
2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract int getNumberPresentation();
2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns the User to User Signaling (UUS) information associated with
2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * incoming and waiting calls
2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return UUSInfo containing the UUS userdata.
2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract UUSInfo getUUSInfo();
2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Build a human representation of a connection instance, suitable for debugging.
2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Don't log personal stuff unless in debug mode.
2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return a string representing the internal state of this connection.
2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String toString() {
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        StringBuilder str = new StringBuilder(128);
2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (Log.isLoggable(LOG_TAG, Log.DEBUG)) {
2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            str.append("addr: " + getAddress())
2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    .append(" pres.: " + getNumberPresentation())
2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    .append(" dial: " + getOrigDialString())
3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    .append(" postdial: " + getRemainingPostDialString())
3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    .append(" cnap name: " + getCnapName())
3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    .append("(" + getCnapNamePresentation() + ")");
3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        str.append(" incoming: " + isIncoming())
3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                .append(" state: " + getState())
3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                .append(" post dial state: " + getPostDialState());
3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return str.toString();
3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
310