Fixed player's ZOOM mode for KitKat devices
This commit is contained in:
parent
df9823988e
commit
d0fc9fda71
|
@ -1946,7 +1946,13 @@ public class VideoDetailFragment
|
||||||
}
|
}
|
||||||
scrollToTop();
|
scrollToTop();
|
||||||
|
|
||||||
addVideoPlayerView();
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
|
addVideoPlayerView();
|
||||||
|
} else {
|
||||||
|
// KitKat needs a delay before addVideoPlayerView call or it reports wrong height in
|
||||||
|
// activity.getWindow().getDecorView().getHeight()
|
||||||
|
new Handler().post(this::addVideoPlayerView);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
package org.schabi.newpipe.views;
|
package org.schabi.newpipe.views;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.Build.VERSION;
|
||||||
|
import android.os.Build.VERSION_CODES;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.SurfaceView;
|
import android.view.SurfaceView;
|
||||||
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
||||||
|
|
||||||
|
import static com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_FIT;
|
||||||
import static com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_ZOOM;
|
import static com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_ZOOM;
|
||||||
|
|
||||||
public class ExpandableSurfaceView extends SurfaceView {
|
public class ExpandableSurfaceView extends SurfaceView {
|
||||||
private int resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT;
|
private int resizeMode = RESIZE_MODE_FIT;
|
||||||
private int baseHeight = 0;
|
private int baseHeight = 0;
|
||||||
private int maxHeight = 0;
|
private int maxHeight = 0;
|
||||||
private float videoAspectRatio = 0.0f;
|
private float videoAspectRatio = 0.0f;
|
||||||
|
@ -30,7 +33,7 @@ public class ExpandableSurfaceView extends SurfaceView {
|
||||||
final boolean verticalVideo = videoAspectRatio < 1;
|
final boolean verticalVideo = videoAspectRatio < 1;
|
||||||
// Use maxHeight only on non-fit resize mode and in vertical videos
|
// Use maxHeight only on non-fit resize mode and in vertical videos
|
||||||
int height = maxHeight != 0
|
int height = maxHeight != 0
|
||||||
&& resizeMode != AspectRatioFrameLayout.RESIZE_MODE_FIT
|
&& resizeMode != RESIZE_MODE_FIT
|
||||||
&& verticalVideo ? maxHeight : baseHeight;
|
&& verticalVideo ? maxHeight : baseHeight;
|
||||||
|
|
||||||
if (height == 0) {
|
if (height == 0) {
|
||||||
|
@ -42,26 +45,22 @@ public class ExpandableSurfaceView extends SurfaceView {
|
||||||
scaleX = 1.0f;
|
scaleX = 1.0f;
|
||||||
scaleY = 1.0f;
|
scaleY = 1.0f;
|
||||||
|
|
||||||
switch (resizeMode) {
|
if (resizeMode == RESIZE_MODE_FIT
|
||||||
case AspectRatioFrameLayout.RESIZE_MODE_FIT:
|
// KitKat doesn't work well when a view has a scale like needed for ZOOM
|
||||||
if (aspectDeformation > 0) {
|
|| (resizeMode == RESIZE_MODE_ZOOM && VERSION.SDK_INT < VERSION_CODES.LOLLIPOP)) {
|
||||||
height = (int) (width / videoAspectRatio);
|
if (aspectDeformation > 0) {
|
||||||
} else {
|
height = (int) (width / videoAspectRatio);
|
||||||
width = (int) (height * videoAspectRatio);
|
} else {
|
||||||
}
|
width = (int) (height * videoAspectRatio);
|
||||||
|
}
|
||||||
break;
|
} else if (resizeMode == RESIZE_MODE_ZOOM) {
|
||||||
case RESIZE_MODE_ZOOM:
|
if (aspectDeformation < 0) {
|
||||||
if (aspectDeformation < 0) {
|
scaleY = viewAspectRatio / videoAspectRatio;
|
||||||
scaleY = viewAspectRatio / videoAspectRatio;
|
} else {
|
||||||
} else {
|
scaleX = videoAspectRatio / viewAspectRatio;
|
||||||
scaleX = videoAspectRatio / viewAspectRatio;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
|
super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
|
||||||
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
|
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue