Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2009 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
| 17 | package com.android.phone; |
| 18 | |
| 19 | /** |
| 20 | * Class to internally keep track of Call states to maintain |
| 21 | * information for Call Waiting and 3Way for CDMA instance of Phone App. |
| 22 | * |
| 23 | * Explanation for PhoneApp's Call states and why it is required: |
| 24 | * IDLE - When no call is going on. This is just required as default state to reset the PhoneApp |
| 25 | * call state to when the complete call gets disconnected |
| 26 | * SINGLE_ACTIVE - When only single call is active. |
| 27 | * In normal case(on a single call) this state would be similar for FW's state of ACTIVE |
| 28 | * call or phone state of OFFHOOK, but in more complex conditions e.g. when phone is already |
| 29 | * in a CONF_CALL state and user rejects a CW, which basically tells the PhoneApp that the |
| 30 | * Call is back to a single call, the FW's state still would remain ACTIVE or OFFHOOK and |
| 31 | * isGeneric would still be true. At this condition PhoneApp does need to enable the |
| 32 | * "Add Call" menu item and disable the "Swap" and "Merge" options |
| 33 | * THRWAY_ACTIVE - When user initiate an outgoing call when already on a call. |
| 34 | * fgCall can have more than one connections from various scenarios (accepting the CW or |
| 35 | * making a 3way call) but once we are in this state and one of the parties drops off, |
| 36 | * when the user originates another call we need to remember this state to update the menu |
| 37 | * items accordingly. FW currently does not differentiate this condition hence PhoneApp |
| 38 | * needs to maintain it. |
| 39 | * CONF_CALL - When the user merges two calls or on accepting the Call waiting call. |
| 40 | * This is required cause even though a call might be generic but that does not mean it is |
| 41 | * in conference. We can take the same example mention in the SINGLE_ACTIVE state. |
| 42 | * |
| 43 | * TODO: Eventually this state information should be maintained by Telephony FW. |
| 44 | */ |
| 45 | public class CdmaPhoneCallState { |
| 46 | |
| 47 | /** |
| 48 | * Allowable values for the PhoneCallState. |
| 49 | * IDLE - When no call is going on. |
| 50 | * SINGLE_ACTIVE - When only single call is active |
| 51 | * THRWAY_ACTIVE - When user initiate an outgoing call when already on a call |
| 52 | * CONF_CALL - When the user merges two calls or on accepting the Call waiting call |
| 53 | */ |
| 54 | public enum PhoneCallState { |
| 55 | IDLE, |
| 56 | SINGLE_ACTIVE, |
| 57 | THRWAY_ACTIVE, |
| 58 | CONF_CALL |
| 59 | } |
| 60 | |
| 61 | // For storing current and previous PhoneCallState's |
| 62 | private PhoneCallState mPreviousCallState; |
| 63 | private PhoneCallState mCurrentCallState; |
| 64 | |
| 65 | // Boolean to track 3Way display state |
| 66 | private boolean mThreeWayCallOrigStateDialing; |
| 67 | |
| 68 | // Flag to indicate if the "Add Call" menu item in an InCallScreen is OK |
| 69 | // to be displayed after a Call Waiting call was ignored or timed out |
| 70 | private boolean mAddCallMenuStateAfterCW; |
| 71 | |
| 72 | /** |
| 73 | * Initialize PhoneCallState related members - constructor |
| 74 | */ |
| 75 | public void CdmaPhoneCallStateInit() { |
| 76 | mCurrentCallState = PhoneCallState.IDLE; |
| 77 | mPreviousCallState = PhoneCallState.IDLE; |
| 78 | mThreeWayCallOrigStateDialing = false; |
| 79 | mAddCallMenuStateAfterCW = true; |
| 80 | } |
| 81 | |
| 82 | /** |
| 83 | * Returns the current call state |
| 84 | */ |
| 85 | public PhoneCallState getCurrentCallState() { |
| 86 | return mCurrentCallState; |
| 87 | } |
| 88 | |
| 89 | /** |
| 90 | * Set current and previous PhoneCallState's |
| 91 | */ |
| 92 | public void setCurrentCallState(PhoneCallState newState) { |
| 93 | mPreviousCallState = mCurrentCallState; |
| 94 | mCurrentCallState = newState; |
| 95 | |
| 96 | //Reset the 3Way display boolean |
| 97 | mThreeWayCallOrigStateDialing = false; |
| 98 | |
| 99 | //Set mAddCallMenuStateAfterCW to true |
| 100 | //if the current state is being set to SINGLE_ACTIVE |
| 101 | //and previous state was IDLE as we could reach the SINGLE_ACTIVE |
| 102 | //from CW ignore too. For all other cases let the timer or |
| 103 | //specific calls to setAddCallMenuStateAfterCallWaiting set |
| 104 | //mAddCallMenuStateAfterCW. |
| 105 | if ((mCurrentCallState == PhoneCallState.SINGLE_ACTIVE) |
| 106 | && (mPreviousCallState == PhoneCallState.IDLE)) { |
| 107 | mAddCallMenuStateAfterCW = true; |
| 108 | } |
| 109 | } |
| 110 | |
| 111 | /** |
| 112 | * Return 3Way display information |
| 113 | */ |
| 114 | public boolean IsThreeWayCallOrigStateDialing() { |
| 115 | return mThreeWayCallOrigStateDialing; |
| 116 | } |
| 117 | |
| 118 | /** |
| 119 | * Set 3Way display information |
| 120 | */ |
| 121 | public void setThreeWayCallOrigState(boolean newState) { |
| 122 | mThreeWayCallOrigStateDialing = newState; |
| 123 | } |
| 124 | |
| 125 | /** |
| 126 | * Return information for enabling/disabling "Add Call" menu item |
| 127 | */ |
| 128 | public boolean getAddCallMenuStateAfterCallWaiting() { |
| 129 | return mAddCallMenuStateAfterCW; |
| 130 | } |
| 131 | |
| 132 | /** |
| 133 | * Set mAddCallMenuStateAfterCW to enabling/disabling "Add Call" menu item |
| 134 | */ |
| 135 | public void setAddCallMenuStateAfterCallWaiting(boolean newState) { |
| 136 | mAddCallMenuStateAfterCW = newState; |
| 137 | } |
| 138 | |
| 139 | /** |
| 140 | * Return previous PhoneCallState's |
| 141 | */ |
| 142 | public PhoneCallState getPreviousCallState() { |
| 143 | return mPreviousCallState; |
| 144 | } |
| 145 | |
| 146 | /** |
| 147 | * Reset all PhoneCallState |
| 148 | */ |
| 149 | public void resetCdmaPhoneCallState() { |
| 150 | mCurrentCallState = PhoneCallState.IDLE; |
| 151 | mPreviousCallState = PhoneCallState.IDLE; |
| 152 | mThreeWayCallOrigStateDialing = false; |
| 153 | mAddCallMenuStateAfterCW = true; |
| 154 | } |
| 155 | } |