public MovieView()

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();
                            }
                        });
    }