in PictureInPicture/app/src/main/java/com/example/android/pictureinpicture/widget/MovieView.java [142:228]
public MovieView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setBackgroundColor(Color.BLACK);
// Inflate the content
inflate(context, R.layout.view_movie, this);
mSurfaceView = findViewById(R.id.surface);
mShade = findViewById(R.id.shade);
mToggle = findViewById(R.id.toggle);
mFastForward = findViewById(R.id.fast_forward);
mFastRewind = findViewById(R.id.fast_rewind);
mMinimize = findViewById(R.id.minimize);
final TypedArray attributes =
context.obtainStyledAttributes(
attrs,
R.styleable.MovieView,
defStyleAttr,
R.style.Widget_PictureInPicture_MovieView);
setVideoResourceId(attributes.getResourceId(R.styleable.MovieView_android_src, 0));
setAdjustViewBounds(
attributes.getBoolean(R.styleable.MovieView_android_adjustViewBounds, false));
setTitle(attributes.getString(R.styleable.MovieView_android_title));
attributes.recycle();
// Bind view events
final OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View view) {
int id = view.getId();
if (id == R.id.surface) {
toggleControls();
} else if (id == R.id.toggle) {
toggle();
} else if (id == R.id.fast_forward) {
fastForward();
} else if (id == R.id.fast_rewind) {
fastRewind();
} else if (id == R.id.minimize) {
if (mMovieListener != null) {
mMovieListener.onMovieMinimized();
}
}
// Start or reset the timeout to hide controls
if (mMediaPlayer != null) {
if (mTimeoutHandler == null) {
mTimeoutHandler = new TimeoutHandler(MovieView.this);
}
mTimeoutHandler.removeMessages(TimeoutHandler.MESSAGE_HIDE_CONTROLS);
if (mMediaPlayer.isPlaying()) {
mTimeoutHandler.sendEmptyMessageDelayed(
TimeoutHandler.MESSAGE_HIDE_CONTROLS, TIMEOUT_CONTROLS);
}
}
}
};
mSurfaceView.setOnClickListener(listener);
mToggle.setOnClickListener(listener);
mFastForward.setOnClickListener(listener);
mFastRewind.setOnClickListener(listener);
mMinimize.setOnClickListener(listener);
// Prepare video playback
mSurfaceView
.getHolder()
.addCallback(
new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
openVideo(holder.getSurface());
}
@Override
public void surfaceChanged(
SurfaceHolder holder, int format, int width, int height) {
// Do nothing
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (mMediaPlayer != null) {
mSavedCurrentPosition = mMediaPlayer.getCurrentPosition();
}
closeVideo();
}
});
}