Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc821035 authored by Sekine Yasuaki's avatar Sekine Yasuaki Committed by android-build-merger
Browse files

Merge "Fix error case which session change request failed when pausing video"...

Merge "Fix error case which session change request failed when pausing video" am: 9cd15458 am: ddc91436
am: 02f02dca

Change-Id: I94cd8a07ac50179b71ab6ec646d8a42955d3d9c5
parents 446449d2 02f02dca
Loading
Loading
Loading
Loading
+49 −2
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.incallui.audiomode.AudioModeProvider.AudioModeListener;
import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
import com.android.incallui.call.DialerCall.CameraDirection;
import com.android.incallui.call.DialerCallListener;
import com.android.incallui.call.TelecomAdapter;
import com.android.incallui.call.state.DialerCallState;
import com.android.incallui.incall.protocol.InCallButtonIds;
@@ -58,7 +59,8 @@ public class CallButtonPresenter
        InCallDetailsListener,
        CanAddCallListener,
        Listener,
        InCallButtonUiDelegate {
        InCallButtonUiDelegate,
        DialerCallListener {

  private static final String KEY_AUTOMATICALLY_MUTED_BY_ADD_CALL =
      "incall_key_automatically_muted_by_add_call";
@@ -106,11 +108,18 @@ public class CallButtonPresenter
    InCallPresenter.getInstance().getInCallCameraManager().removeCameraSelectionListener(this);
    InCallPresenter.getInstance().removeCanAddCallListener(this);
    isInCallButtonUiReady = false;

    if (call != null) {
      call.removeListener(this);
    }
  }

  @Override
  public void onStateChange(InCallState oldState, InCallState newState, CallList callList) {
    Trace.beginSection("CallButtonPresenter.onStateChange");
    if (call != null) {
      call.removeListener(this);
    }
    if (newState == InCallState.OUTGOING) {
      call = callList.getOutgoingCall();
    } else if (newState == InCallState.INCALL) {
@@ -133,6 +142,10 @@ public class CallButtonPresenter
    } else {
      call = null;
    }

    if (call != null) {
      call.addListener(this);
    }
    updateUi(newState, call);
    Trace.endSection();
  }
@@ -393,7 +406,6 @@ public class CallButtonPresenter
            call.getTimeAddedMs());

    if (pause) {
      call.getVideoTech().setCamera(null);
      call.getVideoTech().stopTransmission();
    } else {
      updateCamera(
@@ -583,6 +595,41 @@ public class CallButtonPresenter
    inCallButtonUi.setCameraSwitched(!isUsingFrontFacingCamera);
  }

  @Override
  public void onDialerCallSessionModificationStateChange() {
    if (inCallButtonUi != null && call != null) {
      inCallButtonUi.enableButton(InCallButtonIds.BUTTON_PAUSE_VIDEO, true);
      updateButtonsState(call);
    }
  }

  @Override
  public void onDialerCallDisconnect() {}

  @Override
  public void onDialerCallUpdate() {}

  @Override
  public void onDialerCallChildNumberChange() {}

  @Override
  public void onDialerCallLastForwardedNumberChange() {}

  @Override
  public void onDialerCallUpgradeToVideo() {}

  @Override
  public void onWiFiToLteHandover() {}

  @Override
  public void onHandoverToWifiFailure() {}

  @Override
  public void onInternationalCallOnWifi() {}

  @Override
  public void onEnrichedCallSessionUpdate() {}

  @Override
  public Context getContext() {
    return context;
+2 −0
Original line number Diff line number Diff line
@@ -92,6 +92,8 @@ public class TopRow {
    } else if (VideoUtils.hasSentVideoUpgradeRequest(state.sessionModificationState())
        || VideoUtils.hasReceivedVideoUpgradeRequest(state.sessionModificationState())) {
      label = getLabelForVideoRequest(context, state);
    } else if (state.sessionModificationState() == SessionModificationState.REQUEST_FAILED) {
      label = context.getString(R.string.incall_video_call_operation_failed);
    } else if (state.state() == DialerCallState.PULLING) {
      label = context.getString(R.string.incall_transferring);
    } else if (state.state() == DialerCallState.DIALING
+3 −0
Original line number Diff line number Diff line
@@ -65,6 +65,9 @@
       requests and we timed out. -->
  <string name="incall_video_call_request_timed_out">Call timed out</string>

  <!-- Displayed above the contact name when the user's operation for video calling is failed due to an unknown reason. -->
  <string name="incall_video_call_operation_failed">Unable to operate</string>

  <!-- In-call screen: status label for a call that's in the process of hanging up
       [CHAR LIMIT=25] -->
  <string name="incall_hanging_up">Hanging up</string>
+24 −18
Original line number Diff line number Diff line
@@ -103,8 +103,6 @@ public class ImsVideoCallCallback extends VideoCall.Callback {

    if (videoTech.getSessionModificationState()
        == SessionModificationState.WAITING_FOR_UPGRADE_TO_VIDEO_RESPONSE) {
      handler.removeCallbacksAndMessages(null); // Clear everything

      final int newSessionModificationState = getSessionModificationStateFromTelecomStatus(status);
      if (status == VideoProvider.SESSION_MODIFY_REQUEST_SUCCESS) {
        // Telecom manages audio route for us
@@ -114,12 +112,32 @@ public class ImsVideoCallCallback extends VideoCall.Callback {
        videoTech.setSessionModificationState(newSessionModificationState);
      }

      // Wait for 4 seconds and then clean the session modification state. This allows the video UI
      // to stay up so that the user can read the error message.
      //
      // If the other person accepted the upgrade request then this will keep the video UI up until
      // the call's video state change. Without this we would switch to the voice call and then
      // switch back to video UI.
      clearFailedResponseState(newSessionModificationState);
    } else if (videoTech.getSessionModificationState()
        == SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST) {
      requestedVideoState = VideoProfile.STATE_AUDIO_ONLY;
      videoTech.setSessionModificationState(SessionModificationState.NO_REQUEST);
    } else if (videoTech.getSessionModificationState()
        == SessionModificationState.WAITING_FOR_RESPONSE) {
      final int newSessionModificationState = getSessionModificationStateFromTelecomStatus(status);
      videoTech.setSessionModificationState(newSessionModificationState);
      if (status != VideoProvider.SESSION_MODIFY_REQUEST_SUCCESS) {
        clearFailedResponseState(newSessionModificationState);
      }
    } else {
      LogUtil.i(
          "ImsVideoCallCallback.onSessionModifyResponseReceived",
          "call is not waiting for response, doing nothing");
    }
  }

  private void clearFailedResponseState(final int newSessionModificationState) {
    handler.removeCallbacksAndMessages(null); // Clear everything
    // Wait for 4 seconds and then clean the session modification state. This allows the video UI
    // to stay up so that the user can read the error message.
    handler.postDelayed(
        () -> {
          if (videoTech.getSessionModificationState() == newSessionModificationState) {
@@ -132,18 +150,6 @@ public class ImsVideoCallCallback extends VideoCall.Callback {
          }
        },
        CLEAR_FAILED_REQUEST_TIMEOUT_MILLIS);
    } else if (videoTech.getSessionModificationState()
        == SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST) {
      requestedVideoState = VideoProfile.STATE_AUDIO_ONLY;
      videoTech.setSessionModificationState(SessionModificationState.NO_REQUEST);
    } else if (videoTech.getSessionModificationState()
        == SessionModificationState.WAITING_FOR_RESPONSE) {
      videoTech.setSessionModificationState(getSessionModificationStateFromTelecomStatus(status));
    } else {
      LogUtil.i(
          "ImsVideoCallCallback.onSessionModifyResponseReceived",
          "call is not waiting for response, doing nothing");
    }
  }

  @SessionModificationState
+1 −0
Original line number Diff line number Diff line
@@ -227,6 +227,7 @@ public class ImsVideoTech implements VideoTech {
    call.getVideoCall()
        .sendSessionModifyRequest(
            new VideoProfile(unpausedVideoState & ~VideoProfile.STATE_TX_ENABLED));
    setSessionModificationState(SessionModificationState.WAITING_FOR_RESPONSE);
  }

  @Override