diff options
author | Cyril Lee <cyrillee@google.com> | 2018-06-20 18:52:05 +0800 |
---|---|---|
committer | Cyril Lee <cyrillee@google.com> | 2018-06-25 11:08:53 +0800 |
commit | e4d2a1d06a1aac5c71729f51834f5a9952120b3f (patch) | |
tree | 514d1c54661f11d42bf6c78894cc9d1c421eb8c6 /library | |
parent | 7c8910c4e435fe36f70a3a610491cd7d49c9d45d (diff) | |
download | setupwizard-e4d2a1d06a1aac5c71729f51834f5a9952120b3f.tar.gz |
Fix video view without updates aspect ratio
The IllustrationVideoView should update size of view when new aspectRatio is different from current.
Bug: 110098506
Test: "./gradlew test" on folder of ub-setupwizard-master branch
Change-Id: I5a4663fa0949a285966be923f183c9f24c4a709c
Diffstat (limited to 'library')
3 files changed, 69 insertions, 3 deletions
diff --git a/library/main/src/com/android/setupwizardlib/view/IllustrationVideoView.java b/library/main/src/com/android/setupwizardlib/view/IllustrationVideoView.java index e5688b3..608c32b 100644 --- a/library/main/src/com/android/setupwizardlib/view/IllustrationVideoView.java +++ b/library/main/src/com/android/setupwizardlib/view/IllustrationVideoView.java @@ -294,9 +294,15 @@ public class IllustrationVideoView extends TextureView implements Animatable, public void onPrepared(MediaPlayer mp) { mPrepared = true; mp.setLooping(shouldLoop()); - float aspectRatio = - (float) mp.getVideoHeight() / mp.getVideoWidth(); - if (Float.compare(mAspectRatio, aspectRatio) == 0) { + + float aspectRatio = 0.0f; + if (mp.getVideoWidth() > 0 && mp.getVideoHeight() > 0) { + aspectRatio = (float) mp.getVideoHeight() / mp.getVideoWidth(); + } else { + Log.w(TAG, "Unexpected video size=" + mp.getVideoWidth() + "x" + + mp.getVideoHeight()); + } + if (Float.compare(mAspectRatio, aspectRatio) != 0) { mAspectRatio = aspectRatio; requestLayout(); } diff --git a/library/test/robotest/src/com/android/setupwizardlib/shadow/ShadowMediaPlayer.java b/library/test/robotest/src/com/android/setupwizardlib/shadow/ShadowMediaPlayer.java index 2ef2b7d..7bcefd0 100644 --- a/library/test/robotest/src/com/android/setupwizardlib/shadow/ShadowMediaPlayer.java +++ b/library/test/robotest/src/com/android/setupwizardlib/shadow/ShadowMediaPlayer.java @@ -34,6 +34,15 @@ import java.util.Map; @Implements(MediaPlayer.class) public class ShadowMediaPlayer extends org.robolectric.shadows.ShadowMediaPlayer { + private int mVideoWidth; + private int mVideoHeight; + + public ShadowMediaPlayer() { + super(); + mVideoWidth = -1; + mVideoHeight = -1; + } + @Implementation public void setDataSource( @NonNull Context context, @@ -48,4 +57,26 @@ public class ShadowMediaPlayer extends org.robolectric.shadows.ShadowMediaPlayer public void seekTo(long msec, int mode) { seekTo((int) msec); } + + public void setVideoSize(int width, int height) { + if (width < 0) { + throw new IllegalArgumentException("Unexpected negative width=" + width); + } + if (height < 0) { + throw new IllegalArgumentException("Unexpected negative height=" + height); + } + + mVideoWidth = width; + mVideoHeight = height; + } + + @Override + public int getVideoWidth() { + return mVideoWidth; + } + + @Override + public int getVideoHeight() { + return mVideoHeight; + } } diff --git a/library/test/robotest/src/com/android/setupwizardlib/view/IllustrationVideoViewTest.java b/library/test/robotest/src/com/android/setupwizardlib/view/IllustrationVideoViewTest.java index c09e22f..a39ffb9 100644 --- a/library/test/robotest/src/com/android/setupwizardlib/view/IllustrationVideoViewTest.java +++ b/library/test/robotest/src/com/android/setupwizardlib/view/IllustrationVideoViewTest.java @@ -161,6 +161,35 @@ public class IllustrationVideoViewTest { + android.R.color.black); } + @Test + public void prepareVideo_shouldSetAspectRatio() { + createDefaultView(); + + mShadowMediaPlayer.setVideoSize(720, 1280); + + Robolectric.flushForegroundThreadScheduler(); + mView.start(); + + mView.measure(View.MeasureSpec.makeMeasureSpec(720, View.MeasureSpec.EXACTLY), + View.MeasureSpec.makeMeasureSpec(720, View.MeasureSpec.EXACTLY)); + + final float aspectRatio = (float) mView.getMeasuredHeight() / mView.getMeasuredWidth(); + assertThat(aspectRatio).isWithin(0.001f).of(1280f / 720f); + } + + @Test + public void prepareVideo_zeroHeight_shouldSetAspectRatioToZero() { + createDefaultView(); + + mShadowMediaPlayer.setVideoSize(720, 0); + + Robolectric.flushForegroundThreadScheduler(); + mView.start(); + + final float aspectRatio = (float) mView.getHeight() / mView.getWidth(); + assertThat(aspectRatio).isEqualTo(0.0f); + } + private void createDefaultView() { mView = new IllustrationVideoView( application, |