162 lines
4.4 KiB
Java
162 lines
4.4 KiB
Java
/*
|
|
* Copyright (C) 2015 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.internal.telephony;
|
|
|
|
import android.compat.annotation.UnsupportedAppUsage;
|
|
import android.os.Build;
|
|
|
|
import com.android.internal.annotations.VisibleForTesting;
|
|
|
|
/**
|
|
* {@hide}
|
|
*/
|
|
public class GsmCdmaCall extends Call {
|
|
/*************************** Instance Variables **************************/
|
|
|
|
/*package*/ GsmCdmaCallTracker mOwner;
|
|
|
|
/****************************** Constructors *****************************/
|
|
/*package*/
|
|
public GsmCdmaCall (GsmCdmaCallTracker owner) {
|
|
mOwner = owner;
|
|
}
|
|
|
|
/************************** Overridden from Call *************************/
|
|
|
|
@Override
|
|
public Phone getPhone() {
|
|
return mOwner.getPhone();
|
|
}
|
|
|
|
@Override
|
|
public boolean isMultiparty() {
|
|
return getConnectionsCount() > 1;
|
|
}
|
|
|
|
/** Please note: if this is the foreground call and a
|
|
* background call exists, the background call will be resumed
|
|
* because an AT+CHLD=1 will be sent
|
|
*/
|
|
@Override
|
|
public void hangup() throws CallStateException {
|
|
mOwner.hangup(this);
|
|
}
|
|
|
|
/**
|
|
* Hangup the ringing call with a specified reason; reason is not supported on GSM/CDMA.
|
|
* @param rejectReason
|
|
*/
|
|
@Override
|
|
public void hangup(@android.telecom.Call.RejectReason int rejectReason)
|
|
throws CallStateException {
|
|
mOwner.hangup(this);
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return mState.toString();
|
|
}
|
|
|
|
//***** Called from GsmCdmaConnection
|
|
|
|
public void attach(Connection conn, DriverCall dc) {
|
|
addConnection(conn);
|
|
|
|
mState = stateFromDCState (dc.state);
|
|
}
|
|
|
|
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
|
|
public void attachFake(Connection conn, State state) {
|
|
addConnection(conn);
|
|
|
|
mState = state;
|
|
}
|
|
|
|
/**
|
|
* Called by GsmCdmaConnection when it has disconnected
|
|
*/
|
|
public boolean connectionDisconnected(GsmCdmaConnection conn) {
|
|
if (mState != State.DISCONNECTED) {
|
|
/* If only disconnected connections remain, we are disconnected*/
|
|
|
|
boolean hasOnlyDisconnectedConnections = true;
|
|
|
|
for (Connection c : getConnections()) {
|
|
if (c.getState() != State.DISCONNECTED) {
|
|
hasOnlyDisconnectedConnections = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (hasOnlyDisconnectedConnections) {
|
|
mState = State.DISCONNECTED;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public void detach(GsmCdmaConnection conn) {
|
|
removeConnection(conn);
|
|
|
|
if (getConnectionsCount() == 0) {
|
|
mState = State.IDLE;
|
|
}
|
|
}
|
|
|
|
/*package*/ boolean update (GsmCdmaConnection conn, DriverCall dc) {
|
|
State newState;
|
|
boolean changed = false;
|
|
|
|
newState = stateFromDCState(dc.state);
|
|
|
|
if (newState != mState) {
|
|
mState = newState;
|
|
changed = true;
|
|
}
|
|
|
|
return changed;
|
|
}
|
|
|
|
/**
|
|
* @return true if there's no space in this call for additional
|
|
* connections to be added via "conference"
|
|
*/
|
|
/*package*/ boolean isFull() {
|
|
return getConnectionsCount() == mOwner.getMaxConnectionsPerCall();
|
|
}
|
|
|
|
//***** Called from GsmCdmaCallTracker
|
|
|
|
|
|
/**
|
|
* Called when this Call is being hung up locally (eg, user pressed "end")
|
|
* Note that at this point, the hangup request has been dispatched to the radio
|
|
* but no response has yet been received so update() has not yet been called
|
|
*/
|
|
@VisibleForTesting
|
|
public void onHangupLocal() {
|
|
if (!mState.isAlive()) {
|
|
return;
|
|
}
|
|
for (Connection conn : getConnections()) {
|
|
((GsmCdmaConnection) conn).onHangupLocal();
|
|
}
|
|
mState = State.DISCONNECTING;
|
|
}
|
|
} |