Loading src/com/android/settings/gestures/GesturePreferenceController.java +25 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.settings.gestures; import android.content.Context; import android.os.Bundle; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.TwoStatePreference; Loading @@ -27,14 +29,20 @@ import com.android.settings.widget.VideoPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnCreate; import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; public abstract class GesturePreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener, LifecycleObserver, OnStart, OnStop { LifecycleObserver, OnStart, OnStop, OnCreate, OnSaveInstanceState { @VisibleForTesting static final String KEY_VIDEO_PAUSED = "key_video_paused"; private VideoPreference mVideoPreference; private boolean mVideoPaused; public GesturePreferenceController(Context context, Lifecycle lifecycle) { super(context); Loading Loading @@ -66,6 +74,21 @@ public abstract class GesturePreferenceController extends AbstractPreferenceCont } } @Override public void onCreate(Bundle savedInstanceState) { if (savedInstanceState != null) { mVideoPaused = savedInstanceState.getBoolean(KEY_VIDEO_PAUSED, false); } } @Override public void onSaveInstanceState(Bundle outState) { if (mVideoPreference != null) { mVideoPaused = mVideoPreference.isVideoPaused(); } outState.putBoolean(KEY_VIDEO_PAUSED, mVideoPaused); } @Override public void onStop() { if (mVideoPreference != null) { Loading @@ -76,7 +99,7 @@ public abstract class GesturePreferenceController extends AbstractPreferenceCont @Override public void onStart() { if (mVideoPreference != null) { mVideoPreference.onViewVisible(); mVideoPreference.onViewVisible(mVideoPaused); } } Loading src/com/android/settings/widget/VideoPreference.java +14 −1 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ public class VideoPreference extends Preference { private MediaPlayer mMediaPlayer; private boolean mAnimationAvailable; private boolean mVideoReady; private boolean mVideoPaused; private int mPreviewResource; public VideoPreference(Context context, AttributeSet attrs) { Loading Loading @@ -100,9 +101,11 @@ public class VideoPreference extends Preference { if (mMediaPlayer.isPlaying()) { mMediaPlayer.pause(); playButton.setVisibility(View.VISIBLE); mVideoPaused = true; } else { mMediaPlayer.start(); playButton.setVisibility(View.GONE); mVideoPaused = false; } } }); Loading Loading @@ -133,6 +136,10 @@ public class VideoPreference extends Preference { public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { if (mVideoReady && imageView.getVisibility() == View.VISIBLE) { imageView.setVisibility(View.GONE); if (!mVideoPaused && mMediaPlayer != null && !mMediaPlayer.isPlaying()) { mMediaPlayer.start(); playButton.setVisibility(View.GONE); } } if (mMediaPlayer != null && !mMediaPlayer.isPlaying() && playButton.getVisibility() != View.VISIBLE) { Loading @@ -152,7 +159,8 @@ public class VideoPreference extends Preference { super.onDetached(); } public void onViewVisible() { public void onViewVisible(boolean videoPaused) { mVideoPaused = videoPaused; if (mVideoReady && mMediaPlayer != null && !mMediaPlayer.isPlaying()) { mMediaPlayer.seekTo(0); } Loading @@ -163,4 +171,9 @@ public class VideoPreference extends Preference { mMediaPlayer.pause(); } } public boolean isVideoPaused() { return mVideoPaused; } } tests/robotests/src/com/android/settings/gestures/GesturePreferenceControllerTest.java +36 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.gestures; import android.content.Context; import android.os.Bundle; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.TwoStatePreference; Loading @@ -38,6 +39,7 @@ import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -84,15 +86,29 @@ public class GesturePreferenceControllerTest { } @Test public void onStart_shouldStartVideoPreference() { public void onStart_shouldStartVideoPreferenceWithVideoPauseState() { final VideoPreference videoPreference = mock(VideoPreference.class); when(mScreen.findPreference(mController.getVideoPrefKey())).thenReturn(videoPreference); mController.mIsPrefAvailable = true; mController.displayPreference(mScreen); final Bundle savedState = new Bundle(); mController.onCreate(null); mController.onStart(); verify(videoPreference).onViewVisible(false); reset(videoPreference); savedState.putBoolean(mController.KEY_VIDEO_PAUSED, true); mController.onCreate(savedState); mController.onStart(); verify(videoPreference).onViewVisible(true); verify(videoPreference).onViewVisible(); reset(videoPreference); savedState.putBoolean(mController.KEY_VIDEO_PAUSED, false); mController.onCreate(savedState); mController.onStart(); verify(videoPreference).onViewVisible(false); } @Test Loading @@ -107,6 +123,24 @@ public class GesturePreferenceControllerTest { verify(videoPreference).onViewInvisible(); } @Test public void onSaveInstanceState_shouldSaveVideoPauseState() { final VideoPreference videoPreference = mock(VideoPreference.class); when(mScreen.findPreference(mController.getVideoPrefKey())).thenReturn(videoPreference); mController.mIsPrefAvailable = true; mController.displayPreference(mScreen); final Bundle outState = mock(Bundle.class); when(videoPreference.isVideoPaused()).thenReturn(true); mController.onSaveInstanceState(outState); verify(outState).putBoolean(mController.KEY_VIDEO_PAUSED, true); reset(outState); when(videoPreference.isVideoPaused()).thenReturn(false); mController.onSaveInstanceState(outState); verify(outState).putBoolean(mController.KEY_VIDEO_PAUSED, false); } @Test public void updateState_preferenceSetCheckedWhenSettingIsOn() { // Mock a TwoStatePreference Loading Loading
src/com/android/settings/gestures/GesturePreferenceController.java +25 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.settings.gestures; import android.content.Context; import android.os.Bundle; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.TwoStatePreference; Loading @@ -27,14 +29,20 @@ import com.android.settings.widget.VideoPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnCreate; import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; public abstract class GesturePreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener, LifecycleObserver, OnStart, OnStop { LifecycleObserver, OnStart, OnStop, OnCreate, OnSaveInstanceState { @VisibleForTesting static final String KEY_VIDEO_PAUSED = "key_video_paused"; private VideoPreference mVideoPreference; private boolean mVideoPaused; public GesturePreferenceController(Context context, Lifecycle lifecycle) { super(context); Loading Loading @@ -66,6 +74,21 @@ public abstract class GesturePreferenceController extends AbstractPreferenceCont } } @Override public void onCreate(Bundle savedInstanceState) { if (savedInstanceState != null) { mVideoPaused = savedInstanceState.getBoolean(KEY_VIDEO_PAUSED, false); } } @Override public void onSaveInstanceState(Bundle outState) { if (mVideoPreference != null) { mVideoPaused = mVideoPreference.isVideoPaused(); } outState.putBoolean(KEY_VIDEO_PAUSED, mVideoPaused); } @Override public void onStop() { if (mVideoPreference != null) { Loading @@ -76,7 +99,7 @@ public abstract class GesturePreferenceController extends AbstractPreferenceCont @Override public void onStart() { if (mVideoPreference != null) { mVideoPreference.onViewVisible(); mVideoPreference.onViewVisible(mVideoPaused); } } Loading
src/com/android/settings/widget/VideoPreference.java +14 −1 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ public class VideoPreference extends Preference { private MediaPlayer mMediaPlayer; private boolean mAnimationAvailable; private boolean mVideoReady; private boolean mVideoPaused; private int mPreviewResource; public VideoPreference(Context context, AttributeSet attrs) { Loading Loading @@ -100,9 +101,11 @@ public class VideoPreference extends Preference { if (mMediaPlayer.isPlaying()) { mMediaPlayer.pause(); playButton.setVisibility(View.VISIBLE); mVideoPaused = true; } else { mMediaPlayer.start(); playButton.setVisibility(View.GONE); mVideoPaused = false; } } }); Loading Loading @@ -133,6 +136,10 @@ public class VideoPreference extends Preference { public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { if (mVideoReady && imageView.getVisibility() == View.VISIBLE) { imageView.setVisibility(View.GONE); if (!mVideoPaused && mMediaPlayer != null && !mMediaPlayer.isPlaying()) { mMediaPlayer.start(); playButton.setVisibility(View.GONE); } } if (mMediaPlayer != null && !mMediaPlayer.isPlaying() && playButton.getVisibility() != View.VISIBLE) { Loading @@ -152,7 +159,8 @@ public class VideoPreference extends Preference { super.onDetached(); } public void onViewVisible() { public void onViewVisible(boolean videoPaused) { mVideoPaused = videoPaused; if (mVideoReady && mMediaPlayer != null && !mMediaPlayer.isPlaying()) { mMediaPlayer.seekTo(0); } Loading @@ -163,4 +171,9 @@ public class VideoPreference extends Preference { mMediaPlayer.pause(); } } public boolean isVideoPaused() { return mVideoPaused; } }
tests/robotests/src/com/android/settings/gestures/GesturePreferenceControllerTest.java +36 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.gestures; import android.content.Context; import android.os.Bundle; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.TwoStatePreference; Loading @@ -38,6 +39,7 @@ import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -84,15 +86,29 @@ public class GesturePreferenceControllerTest { } @Test public void onStart_shouldStartVideoPreference() { public void onStart_shouldStartVideoPreferenceWithVideoPauseState() { final VideoPreference videoPreference = mock(VideoPreference.class); when(mScreen.findPreference(mController.getVideoPrefKey())).thenReturn(videoPreference); mController.mIsPrefAvailable = true; mController.displayPreference(mScreen); final Bundle savedState = new Bundle(); mController.onCreate(null); mController.onStart(); verify(videoPreference).onViewVisible(false); reset(videoPreference); savedState.putBoolean(mController.KEY_VIDEO_PAUSED, true); mController.onCreate(savedState); mController.onStart(); verify(videoPreference).onViewVisible(true); verify(videoPreference).onViewVisible(); reset(videoPreference); savedState.putBoolean(mController.KEY_VIDEO_PAUSED, false); mController.onCreate(savedState); mController.onStart(); verify(videoPreference).onViewVisible(false); } @Test Loading @@ -107,6 +123,24 @@ public class GesturePreferenceControllerTest { verify(videoPreference).onViewInvisible(); } @Test public void onSaveInstanceState_shouldSaveVideoPauseState() { final VideoPreference videoPreference = mock(VideoPreference.class); when(mScreen.findPreference(mController.getVideoPrefKey())).thenReturn(videoPreference); mController.mIsPrefAvailable = true; mController.displayPreference(mScreen); final Bundle outState = mock(Bundle.class); when(videoPreference.isVideoPaused()).thenReturn(true); mController.onSaveInstanceState(outState); verify(outState).putBoolean(mController.KEY_VIDEO_PAUSED, true); reset(outState); when(videoPreference.isVideoPaused()).thenReturn(false); mController.onSaveInstanceState(outState); verify(outState).putBoolean(mController.KEY_VIDEO_PAUSED, false); } @Test public void updateState_preferenceSetCheckedWhenSettingIsOn() { // Mock a TwoStatePreference Loading