mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-27 14:40:22 +00:00
Fix rendering after rotation.
This commit is contained in:
committed by
Cody Henthorne
parent
21e53e360e
commit
0d51faf618
@@ -58,6 +58,37 @@ final class PictureInPictureExpansionHelper {
|
||||
return defaultDimensions.x < ViewUtil.dpToPx(NORMAL_PIP_WIDTH_DP);
|
||||
}
|
||||
|
||||
public void startExpandedSizeTransition(@NonNull Point dimensions, @NonNull Callback callback) {
|
||||
if (defaultDimensions.equals(dimensions)) {
|
||||
return;
|
||||
}
|
||||
|
||||
defaultDimensions = dimensions;
|
||||
|
||||
int x = (dimensions.x > dimensions.y) ? EXPANDED_PIP_HEIGHT_DP : EXPANDED_PIP_WIDTH_DP;
|
||||
int y = (dimensions.x > dimensions.y) ? EXPANDED_PIP_WIDTH_DP : EXPANDED_PIP_HEIGHT_DP;
|
||||
|
||||
expandedDimensions = new Point(ViewUtil.dpToPx(x), ViewUtil.dpToPx(y));
|
||||
|
||||
if (isExpandedOrExpanding()) {
|
||||
return;
|
||||
}
|
||||
|
||||
beginResizeSelfPipTransition(expandedDimensions, new Callback() {
|
||||
@Override
|
||||
public void onAnimationWillStart() {
|
||||
setState(State.IS_EXPANDING);
|
||||
callback.onAnimationWillStart();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationHasFinished() {
|
||||
setState(State.IS_EXPANDED);
|
||||
callback.onAnimationHasFinished();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void startDefaultSizeTransition(@NonNull Point dimensions, @NonNull Callback callback) {
|
||||
if (defaultDimensions.equals(dimensions)) {
|
||||
return;
|
||||
|
||||
@@ -557,8 +557,17 @@ public class WebRtcCallView extends InsetAwareConstraintLayout {
|
||||
smallLocalRender.setMirror(localCallParticipant.getCameraDirection() == CameraState.Direction.FRONT);
|
||||
|
||||
if (state == WebRtcLocalRenderState.EXPANDED) {
|
||||
pictureInPictureExpansionHelper.beginExpandTransition();
|
||||
smallLocalRender.setSelfPipMode(CallParticipantView.SelfPipMode.EXPANDED_SELF_PIP, localCallParticipant.isMoreThanOneCameraAvailable());
|
||||
if (largeLocalRenderFrame.getVisibility() == View.VISIBLE) {
|
||||
smallLocalRenderFrame.setVisibility(View.VISIBLE);
|
||||
animatePipToExpandedRectangle(displaySmallSelfPipInLandscape, localCallParticipant.isMoreThanOneCameraAvailable());
|
||||
|
||||
largeLocalRender.attachBroadcastVideoSink(null);
|
||||
largeLocalRenderFrame.setVisibility(View.GONE);
|
||||
} else {
|
||||
pictureInPictureExpansionHelper.beginExpandTransition();
|
||||
smallLocalRender.setSelfPipMode(CallParticipantView.SelfPipMode.EXPANDED_SELF_PIP, localCallParticipant.isMoreThanOneCameraAvailable());
|
||||
}
|
||||
|
||||
return;
|
||||
} else if ((state.isAnySmall() || state == WebRtcLocalRenderState.GONE) && pictureInPictureExpansionHelper.isExpandedOrExpanding()) {
|
||||
pictureInPictureExpansionHelper.beginShrinkTransition();
|
||||
@@ -784,6 +793,26 @@ public class WebRtcCallView extends InsetAwareConstraintLayout {
|
||||
}
|
||||
}
|
||||
|
||||
private void animatePipToExpandedRectangle(boolean isLandscape, boolean moreThanOneCameraAvailable) {
|
||||
final Point dimens;
|
||||
if (isLandscape) {
|
||||
dimens = new Point(ViewUtil.dpToPx(PictureInPictureExpansionHelper.NORMAL_PIP_HEIGHT_DP),
|
||||
ViewUtil.dpToPx(PictureInPictureExpansionHelper.NORMAL_PIP_WIDTH_DP));
|
||||
} else {
|
||||
dimens = new Point(ViewUtil.dpToPx(PictureInPictureExpansionHelper.NORMAL_PIP_WIDTH_DP),
|
||||
ViewUtil.dpToPx(PictureInPictureExpansionHelper.NORMAL_PIP_HEIGHT_DP));
|
||||
}
|
||||
|
||||
pictureInPictureExpansionHelper.startExpandedSizeTransition(dimens, new PictureInPictureExpansionHelper.Callback() {
|
||||
@Override
|
||||
public void onAnimationHasFinished() {
|
||||
pictureInPictureGestureHelper.enableCorners();
|
||||
}
|
||||
});
|
||||
|
||||
smallLocalRender.setSelfPipMode(CallParticipantView.SelfPipMode.EXPANDED_SELF_PIP, moreThanOneCameraAvailable);
|
||||
}
|
||||
|
||||
private void animatePipToLargeRectangle(boolean isLandscape, boolean moreThanOneCameraAvailable) {
|
||||
final Point dimens;
|
||||
if (isLandscape) {
|
||||
|
||||
Reference in New Issue
Block a user