diff --git a/library/main/res/values-en-rXC/strings.xml b/library/main/res/values-en-rXC/strings.xml index 693af6b..7a7836b 100644 --- a/library/main/res/values-en-rXC/strings.xml +++ b/library/main/res/values-en-rXC/strings.xml @@ -17,7 +17,7 @@ - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‎Next‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎Back‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‏‏‎More‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‎Next‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎Back‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‏‏‎More‎‏‎‎‏‎" diff --git a/library/main/res/values-hi/strings.xml b/library/main/res/values-hi/strings.xml index 3fb41d3..ec2cd77 100644 --- a/library/main/res/values-hi/strings.xml +++ b/library/main/res/values-hi/strings.xml @@ -19,5 +19,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "आगे बढ़ें" "पीछे" - "अधिक" + "ज़्यादा" diff --git a/library/main/res/values-mr/strings.xml b/library/main/res/values-mr/strings.xml index a529655..5c5b6c2 100644 --- a/library/main/res/values-mr/strings.xml +++ b/library/main/res/values-mr/strings.xml @@ -17,7 +17,7 @@ - "पुढील" + "पुढे जा" "मागे" "अधिक" diff --git a/library/main/src/com/android/setupwizardlib/view/IllustrationVideoView.java b/library/main/src/com/android/setupwizardlib/view/IllustrationVideoView.java index e5c2fb1..fd1e176 100644 --- a/library/main/src/com/android/setupwizardlib/view/IllustrationVideoView.java +++ b/library/main/src/com/android/setupwizardlib/view/IllustrationVideoView.java @@ -64,6 +64,8 @@ public class IllustrationVideoView extends TextureView implements Animatable, @VisibleForTesting Surface mSurface; + protected int mWindowVisibility; + public IllustrationVideoView(Context context, AttributeSet attrs) { super(context, attrs); final TypedArray a = context.obtainStyledAttributes(attrs, @@ -124,7 +126,7 @@ public class IllustrationVideoView extends TextureView implements Animatable, * Creates a media player for the current URI. The media player will be started immediately if * the view's window is visible. If there is an existing media player, it will be released. */ - private void createMediaPlayer() { + protected void createMediaPlayer() { if (mMediaPlayer != null) { mMediaPlayer.release(); } @@ -149,11 +151,35 @@ public class IllustrationVideoView extends TextureView implements Animatable, } else { Log.wtf(TAG, "Unable to initialize media player for video view"); } - if (getWindowVisibility() == View.VISIBLE) { + if (mWindowVisibility == View.VISIBLE) { start(); } } + protected void createSurface() { + if (mSurface != null) { + mSurface.release(); + mSurface = null; + } + // Reattach only if it has been previously released + SurfaceTexture surfaceTexture = getSurfaceTexture(); + if (surfaceTexture != null) { + setVisibility(View.INVISIBLE); + mSurface = new Surface(surfaceTexture); + } + } + + @Override + protected void onWindowVisibilityChanged(int visibility) { + super.onWindowVisibilityChanged(visibility); + mWindowVisibility = visibility; + if (visibility == View.VISIBLE) { + reattach(); + } else { + release(); + } + } + /** * Whether the media player should play the video in a continuous loop. The default value is * true. @@ -178,14 +204,34 @@ public class IllustrationVideoView extends TextureView implements Animatable, } } + private void reattach() { + if (mSurface == null) { + initVideo(); + } + } + + private void initVideo() { + if (mWindowVisibility != View.VISIBLE) { + return; + } + createSurface(); + if (mSurface != null) { + createMediaPlayer(); + } else { + Log.w("IllustrationVideoView", "Surface creation failed"); + } + } + + protected void onRenderingStart() { + } + /* SurfaceTextureListener methods */ @Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) { // Keep the view hidden until video starts setVisibility(View.INVISIBLE); - mSurface = new Surface(surfaceTexture); - createMediaPlayer(); + initVideo(); } @Override @@ -230,6 +276,7 @@ public class IllustrationVideoView extends TextureView implements Animatable, if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { // Video available, show view now setVisibility(View.VISIBLE); + onRenderingStart(); } return false; } 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 21822a4..a501506 100644 --- a/library/test/robotest/src/com/android/setupwizardlib/view/IllustrationVideoViewTest.java +++ b/library/test/robotest/src/com/android/setupwizardlib/view/IllustrationVideoViewTest.java @@ -16,6 +16,8 @@ package com.android.setupwizardlib.view; +import static com.google.common.truth.Truth.assertThat; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; @@ -31,6 +33,7 @@ import android.media.MediaPlayer; import android.os.Build.VERSION_CODES; import android.support.annotation.RawRes; import android.view.Surface; +import android.view.View; import com.android.setupwizardlib.R; import com.android.setupwizardlib.robolectric.SuwLibRobolectricTestRunner; @@ -90,6 +93,30 @@ public class IllustrationVideoViewTest { } } + @Test + public void onVisibilityChanged_notVisible_shouldRelease() { + createDefaultView(); + mView.onWindowVisibilityChanged(View.GONE); + + verify(ShadowMockMediaPlayer.sMediaPlayer).release(); + assertThat(mView.mSurface).isNull(); + assertThat(mView.mMediaPlayer).isNull(); + } + + @Test + public void onVisibilityChanged_visible_shouldPlay() { + createDefaultView(); + + mView.onWindowVisibilityChanged(View.GONE); + assertThat(mView.mSurface).isNull(); + assertThat(mView.mMediaPlayer).isNull(); + + mView.onWindowVisibilityChanged(View.VISIBLE); + + assertThat(mView.mSurface).isNotNull(); + assertThat(mView.mMediaPlayer).isNotNull(); + } + @Test public void testPausedWhenWindowFocusLost() { createDefaultView(); @@ -148,6 +175,7 @@ public class IllustrationVideoViewTest { // Any resource attribute should work, since the media player is mocked .addAttribute(R.attr.suwVideo, "@android:color/white") .build()); + mView.setSurfaceTexture(mock(SurfaceTexture.class)); mView.onSurfaceTextureAvailable(mSurfaceTexture, 500, 500); } diff --git a/navigationbar/res/values-en-rXC/strings.xml b/navigationbar/res/values-en-rXC/strings.xml index 5c7c658..8107182 100644 --- a/navigationbar/res/values-en-rXC/strings.xml +++ b/navigationbar/res/values-en-rXC/strings.xml @@ -1,6 +1,6 @@ - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‎Next‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎Back‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‎Next‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎Back‎‏‎‎‏‎" diff --git a/navigationbar/res/values-fi/strings.xml b/navigationbar/res/values-fi/strings.xml index 1bf32f2..c0718e3 100644 --- a/navigationbar/res/values-fi/strings.xml +++ b/navigationbar/res/values-fi/strings.xml @@ -2,5 +2,5 @@ "Seuraava" - "Edellinen" + "Takaisin"