Fix continous playing of gesture animation video.
In the gesture settings, we listen to surface texture updates to determine when both the view and video is ready, and we auto play the animation video. However, sometimes, the video listener will receive the surface texture updates after the settings activity is being paused, in which case, the video will continue to play until the user navigate back to that gesture settings page. In onSurfaceTextureUpdated(), check for view visibility before we try to update anything to avoid unnecessary operation. Change-Id: I46474c9f461d5705f599deb8b2535d8505f2fe75 Bug: 110923173 Test: make RunSettingsRoboTests
This commit is contained in:
@@ -17,11 +17,17 @@
|
||||
package com.android.settings.widget;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.SurfaceTexture;
|
||||
import android.media.MediaPlayer;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.TextureView;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
@@ -70,4 +76,20 @@ public class VideoPreferenceTest {
|
||||
(AspectRatioFrameLayout) mPreferenceViewHolder.findViewById(R.id.video_container);
|
||||
assertThat(layout.mAspectRatio).isWithin(0.01f).of(VIDEO_WIDTH / (float) VIDEO_HEIGHT);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onSurfaceTextureUpdated_viewInvisible_shouldNotStartPlayingVideo() {
|
||||
final TextureView video =
|
||||
(TextureView) mPreferenceViewHolder.findViewById(R.id.video_texture_view);
|
||||
mVideoPreference.mAnimationAvailable = true;
|
||||
mVideoPreference.mVideoReady = true;
|
||||
mVideoPreference.onBindViewHolder(mPreferenceViewHolder);
|
||||
mVideoPreference.onViewInvisible();
|
||||
when(mMediaPlayer.isPlaying()).thenReturn(false);
|
||||
final TextureView.SurfaceTextureListener listener = video.getSurfaceTextureListener();
|
||||
|
||||
listener.onSurfaceTextureUpdated(mock(SurfaceTexture.class));
|
||||
|
||||
verify(mMediaPlayer, never()).start();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user