Loading src/com/android/server/telecom/Call.java +11 −3 Original line number Diff line number Diff line Loading @@ -382,12 +382,21 @@ final class Call implements CreateConnectionResponse { void setState(int newState) { if (mState != newState) { Log.v(this, "setState %s -> %s", mState, newState); int oldState = mState; mState = newState; maybeLoadCannedSmsResponses(); if (mState == CallState.DISCONNECTED) { setLocallyDisconnecting(false); fixParentAfterDisconnect(); if ((oldState == CallState.DIALING || oldState == CallState.CONNECTING) && mCreateConnectionProcessor != null && mCreateConnectionProcessor.isProcessingComplete() && mCreateConnectionProcessor.hasMorePhoneAccounts() && mDisconnectCause != null && mDisconnectCause.getCode() == DisconnectCause.ERROR) { mCreateConnectionProcessor.continueProcessingIfPossible(this, mDisconnectCause); } } } } Loading Loading @@ -689,7 +698,6 @@ final class Call implements CreateConnectionResponse { CallIdMapper idMapper, ParcelableConnection connection) { Log.v(this, "handleCreateConnectionSuccessful %s", connection); mCreateConnectionProcessor = null; setTargetPhoneAccount(connection.getPhoneAccount()); setHandle(connection.getHandle(), connection.getHandlePresentation()); setCallerDisplayName( Loading Loading @@ -731,7 +739,6 @@ final class Call implements CreateConnectionResponse { @Override public void handleCreateConnectionFailure(DisconnectCause disconnectCause) { mCreateConnectionProcessor = null; clearConnectionService(); setDisconnectCause(disconnectCause); CallsManager.getInstance().markCallAsDisconnected(this, disconnectCause); Loading Loading @@ -806,7 +813,8 @@ final class Call implements CreateConnectionResponse { } void abort(boolean wasViaNewOutgoingCallBroadcaster) { if (mCreateConnectionProcessor != null) { if (mCreateConnectionProcessor != null && !mCreateConnectionProcessor.isProcessingComplete()) { mCreateConnectionProcessor.abort(); } else if (mState == CallState.NEW || mState == CallState.PRE_DIAL_WAIT || mState == CallState.CONNECTING) { Loading src/com/android/server/telecom/CreateConnectionProcessor.java +16 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,10 @@ final class CreateConnectionProcessor { mContext = context; } boolean isProcessingComplete() { return mResponse == null; } void process() { Log.v(this, "process"); mAttemptRecords = new ArrayList<>(); Loading @@ -114,6 +118,18 @@ final class CreateConnectionProcessor { attemptNextPhoneAccount(); } boolean hasMorePhoneAccounts() { return mAttemptRecordIterator.hasNext(); } void continueProcessingIfPossible(CreateConnectionResponse response, DisconnectCause disconnectCause) { Log.v(this, "continueProcessingIfPossible"); mResponse = response; mLastErrorDisconnectCause = disconnectCause; attemptNextPhoneAccount(); } void abort() { Log.v(this, "abort"); Loading Loading
src/com/android/server/telecom/Call.java +11 −3 Original line number Diff line number Diff line Loading @@ -382,12 +382,21 @@ final class Call implements CreateConnectionResponse { void setState(int newState) { if (mState != newState) { Log.v(this, "setState %s -> %s", mState, newState); int oldState = mState; mState = newState; maybeLoadCannedSmsResponses(); if (mState == CallState.DISCONNECTED) { setLocallyDisconnecting(false); fixParentAfterDisconnect(); if ((oldState == CallState.DIALING || oldState == CallState.CONNECTING) && mCreateConnectionProcessor != null && mCreateConnectionProcessor.isProcessingComplete() && mCreateConnectionProcessor.hasMorePhoneAccounts() && mDisconnectCause != null && mDisconnectCause.getCode() == DisconnectCause.ERROR) { mCreateConnectionProcessor.continueProcessingIfPossible(this, mDisconnectCause); } } } } Loading Loading @@ -689,7 +698,6 @@ final class Call implements CreateConnectionResponse { CallIdMapper idMapper, ParcelableConnection connection) { Log.v(this, "handleCreateConnectionSuccessful %s", connection); mCreateConnectionProcessor = null; setTargetPhoneAccount(connection.getPhoneAccount()); setHandle(connection.getHandle(), connection.getHandlePresentation()); setCallerDisplayName( Loading Loading @@ -731,7 +739,6 @@ final class Call implements CreateConnectionResponse { @Override public void handleCreateConnectionFailure(DisconnectCause disconnectCause) { mCreateConnectionProcessor = null; clearConnectionService(); setDisconnectCause(disconnectCause); CallsManager.getInstance().markCallAsDisconnected(this, disconnectCause); Loading Loading @@ -806,7 +813,8 @@ final class Call implements CreateConnectionResponse { } void abort(boolean wasViaNewOutgoingCallBroadcaster) { if (mCreateConnectionProcessor != null) { if (mCreateConnectionProcessor != null && !mCreateConnectionProcessor.isProcessingComplete()) { mCreateConnectionProcessor.abort(); } else if (mState == CallState.NEW || mState == CallState.PRE_DIAL_WAIT || mState == CallState.CONNECTING) { Loading
src/com/android/server/telecom/CreateConnectionProcessor.java +16 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,10 @@ final class CreateConnectionProcessor { mContext = context; } boolean isProcessingComplete() { return mResponse == null; } void process() { Log.v(this, "process"); mAttemptRecords = new ArrayList<>(); Loading @@ -114,6 +118,18 @@ final class CreateConnectionProcessor { attemptNextPhoneAccount(); } boolean hasMorePhoneAccounts() { return mAttemptRecordIterator.hasNext(); } void continueProcessingIfPossible(CreateConnectionResponse response, DisconnectCause disconnectCause) { Log.v(this, "continueProcessingIfPossible"); mResponse = response; mLastErrorDisconnectCause = disconnectCause; attemptNextPhoneAccount(); } void abort() { Log.v(this, "abort"); Loading