Skip to content
Snippets Groups Projects
Commit 7c125f74 authored by Pierre Duchemin's avatar Pierre Duchemin Committed by Adrien Béraud
Browse files

call: invalid preview margin on rotation

rotation could cause the preview to go out of screen

Change-Id: I1f7bbd7fd9cc83054dd6aaa5123482ca384dca23
parent 75a00fae
No related branches found
No related tags found
No related merge requests found
...@@ -310,6 +310,7 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements ...@@ -310,6 +310,7 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
mPreviewSurfaceWidth = width; mPreviewSurfaceWidth = width;
mPreviewSurfaceHeight = height; mPreviewSurfaceHeight = height;
configurePreview(width, 1);
} }
@Override @Override
...@@ -410,29 +411,12 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements ...@@ -410,29 +411,12 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements
binding.previewSurface.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> binding.previewSurface.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) ->
configureTransform(mPreviewSurfaceWidth, mPreviewSurfaceHeight)); configureTransform(mPreviewSurfaceWidth, mPreviewSurfaceHeight));
float margin = getResources().getDimension(R.dimen.call_preview_margin);
previewSnapAnimation.setDuration(250); previewSnapAnimation.setDuration(250);
previewSnapAnimation.setFloatValues(0.f, 1.f); previewSnapAnimation.setFloatValues(0.f, 1.f);
previewSnapAnimation.setInterpolator(new DecelerateInterpolator()); previewSnapAnimation.setInterpolator(new DecelerateInterpolator());
previewSnapAnimation.addUpdateListener(animation -> { previewSnapAnimation.addUpdateListener(animation -> {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) binding.previewContainer.getLayoutParams(); float animatedFraction = animation == null ? 1 : animation.getAnimatedFraction();
float r = 1.f - animation.getAnimatedFraction(); configurePreview(mPreviewSurfaceWidth, animatedFraction);
float hideMargin = 0.f;
float targetHiddenState = 0.f;
if (previewHiddenState != 0.f) {
targetHiddenState = 1.f;
float v = binding.previewContainer.getWidth() * 0.85f * animation.getAnimatedFraction();
hideMargin = previewPosition == PreviewPosition.RIGHT ? v : -v;
}
setPreviewDragHiddenState(previewHiddenState * r + targetHiddenState * animation.getAnimatedFraction());
float f = margin * animation.getAnimatedFraction();
params.setMargins(
(int)(previewMargins[0] * r + f + hideMargin),
(int)(previewMargins[1] * r + f),
(int)(previewMargins[2] * r + f - hideMargin),
(int)(previewMargins[3] * r + f));
binding.previewContainer.setLayoutParams(params);
}); });
binding.previewContainer.setOnTouchListener((v, event) -> { binding.previewContainer.setOnTouchListener((v, event) -> {
...@@ -547,6 +531,28 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements ...@@ -547,6 +531,28 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements
}); });
} }
private void configurePreview(int width, float animatedFraction) {
float margin = getResources().getDimension(R.dimen.call_preview_margin);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) binding.previewContainer.getLayoutParams();
float r = 1.f - animatedFraction;
float hideMargin = 0.f;
float targetHiddenState = 0.f;
if (previewHiddenState > 0.f) {
targetHiddenState = 1.f;
float v = width * 0.85f * animatedFraction;
hideMargin = previewPosition == PreviewPosition.RIGHT ? v : -v;
}
setPreviewDragHiddenState(previewHiddenState * r + targetHiddenState * animatedFraction);
float f = margin * animatedFraction;
params.setMargins(
(int) (previewMargins[0] * r + f + hideMargin),
(int) (previewMargins[1] * r + f),
(int) (previewMargins[2] * r + f - hideMargin),
(int) (previewMargins[3] * r + f));
binding.previewContainer.setLayoutParams(params);
}
/** /**
* Releases current wakelock and acquires a new proximity wakelock if current call is audio only. * Releases current wakelock and acquires a new proximity wakelock if current call is audio only.
* @param isAudioOnly true if it is an audio call * @param isAudioOnly true if it is an audio call
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment