1cc671dd3caac1d0cbf3f6999ab063c9ff1f297b2Dake Gu// CHECKSTYLE:OFF Generated code
24702556bfd15c9819a7b2af759aee0f719cd631fsusnata/* This file is auto-generated from VideoFragment.java.  DO NOT MODIFY. */
34702556bfd15c9819a7b2af759aee0f719cd631fsusnata
44702556bfd15c9819a7b2af759aee0f719cd631fsusnata/*
54702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Copyright (C) 2016 The Android Open Source Project
64702556bfd15c9819a7b2af759aee0f719cd631fsusnata *
74702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
84702556bfd15c9819a7b2af759aee0f719cd631fsusnata * in compliance with the License. You may obtain a copy of the License at
94702556bfd15c9819a7b2af759aee0f719cd631fsusnata *
104702556bfd15c9819a7b2af759aee0f719cd631fsusnata * http://www.apache.org/licenses/LICENSE-2.0
114702556bfd15c9819a7b2af759aee0f719cd631fsusnata *
124702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Unless required by applicable law or agreed to in writing, software distributed under the License
134702556bfd15c9819a7b2af759aee0f719cd631fsusnata * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
144702556bfd15c9819a7b2af759aee0f719cd631fsusnata * or implied. See the License for the specific language governing permissions and limitations under
154702556bfd15c9819a7b2af759aee0f719cd631fsusnata * the License.
164702556bfd15c9819a7b2af759aee0f719cd631fsusnata */
174702556bfd15c9819a7b2af759aee0f719cd631fsusnatapackage android.support.v17.leanback.app;
184702556bfd15c9819a7b2af759aee0f719cd631fsusnata
194702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.os.Bundle;
204702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.support.v17.leanback.R;
214702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.LayoutInflater;
224702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.SurfaceHolder;
234702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.SurfaceView;
244702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.View;
254702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.ViewGroup;
264702556bfd15c9819a7b2af759aee0f719cd631fsusnata
274702556bfd15c9819a7b2af759aee0f719cd631fsusnata/**
284702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Subclass of {@link PlaybackSupportFragment} that is responsible for providing a {@link SurfaceView}
294702556bfd15c9819a7b2af759aee0f719cd631fsusnata * and rendering video.
304702556bfd15c9819a7b2af759aee0f719cd631fsusnata */
314702556bfd15c9819a7b2af759aee0f719cd631fsusnatapublic class VideoSupportFragment extends PlaybackSupportFragment {
32aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    static final int SURFACE_NOT_CREATED = 0;
33aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    static final int SURFACE_CREATED = 1;
34aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
35aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    SurfaceView mVideoSurface;
36aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    SurfaceHolder.Callback mMediaPlaybackCallback;
37aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
38aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    int mState = SURFACE_NOT_CREATED;
394702556bfd15c9819a7b2af759aee0f719cd631fsusnata
404702556bfd15c9819a7b2af759aee0f719cd631fsusnata    @Override
414702556bfd15c9819a7b2af759aee0f719cd631fsusnata    public View onCreateView(
424702556bfd15c9819a7b2af759aee0f719cd631fsusnata            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
43c2168ad5902b189f3c634e47cd956f99df17fbabsusnata        ViewGroup root = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState);
442452cde3b8d7cbe62f6eb2fbcbcf9a02448d6891Dake Gu        mVideoSurface = (SurfaceView) LayoutInflater.from(getContext()).inflate(
45aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                R.layout.lb_video_surface, root, false);
46c2168ad5902b189f3c634e47cd956f99df17fbabsusnata        root.addView(mVideoSurface, 0);
47aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata        mVideoSurface.getHolder().addCallback(new SurfaceHolder.Callback() {
48aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
49aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            @Override
50aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            public void surfaceCreated(SurfaceHolder holder) {
51aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                if (mMediaPlaybackCallback != null) {
52aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                    mMediaPlaybackCallback.surfaceCreated(holder);
53aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                }
54aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                mState = SURFACE_CREATED;
55aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            }
56aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
57aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            @Override
58aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
59aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                if (mMediaPlaybackCallback != null) {
60aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                    mMediaPlaybackCallback.surfaceChanged(holder, format, width, height);
61aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                }
62aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            }
63aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
64aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            @Override
65aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            public void surfaceDestroyed(SurfaceHolder holder) {
66aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                if (mMediaPlaybackCallback != null) {
67aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                    mMediaPlaybackCallback.surfaceDestroyed(holder);
68aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                }
69aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                mState = SURFACE_NOT_CREATED;
70aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            }
71aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata        });
724702556bfd15c9819a7b2af759aee0f719cd631fsusnata        setBackgroundType(PlaybackSupportFragment.BG_LIGHT);
734702556bfd15c9819a7b2af759aee0f719cd631fsusnata        return root;
744702556bfd15c9819a7b2af759aee0f719cd631fsusnata    }
754702556bfd15c9819a7b2af759aee0f719cd631fsusnata
764702556bfd15c9819a7b2af759aee0f719cd631fsusnata    /**
774702556bfd15c9819a7b2af759aee0f719cd631fsusnata     * Adds {@link SurfaceHolder.Callback} to {@link android.view.SurfaceView}.
784702556bfd15c9819a7b2af759aee0f719cd631fsusnata     */
794702556bfd15c9819a7b2af759aee0f719cd631fsusnata    public void setSurfaceHolderCallback(SurfaceHolder.Callback callback) {
804702556bfd15c9819a7b2af759aee0f719cd631fsusnata        mMediaPlaybackCallback = callback;
81aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
82aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata        if (callback != null) {
83aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            if (mState == SURFACE_CREATED) {
84aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                mMediaPlaybackCallback.surfaceCreated(mVideoSurface.getHolder());
85aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            }
864702556bfd15c9819a7b2af759aee0f719cd631fsusnata        }
874702556bfd15c9819a7b2af759aee0f719cd631fsusnata    }
88aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
893bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    @Override
903bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    protected void onVideoSizeChanged(int width, int height) {
913bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        int screenWidth = getView().getWidth();
923bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        int screenHeight = getView().getHeight();
933bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu
943bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        ViewGroup.LayoutParams p = mVideoSurface.getLayoutParams();
953bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        if (screenWidth * height > width * screenHeight) {
963bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            // fit in screen height
973bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            p.height = screenHeight;
983bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            p.width = screenHeight * width / height;
993bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        } else {
1003bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            // fit in screen width
1013bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            p.width = screenWidth;
1023bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            p.height = screenWidth * height / width;
1033bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        }
1043bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mVideoSurface.setLayoutParams(p);
1053bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    }
1063bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu
107aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    /**
108aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata     * Returns the surface view.
109aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata     */
110aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    public SurfaceView getSurfaceView() {
111aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata        return mVideoSurface;
112aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    }
113f37579e64940bfdd642cc315f6347d60b5addd69Dake Gu
114f37579e64940bfdd642cc315f6347d60b5addd69Dake Gu    @Override
115f37579e64940bfdd642cc315f6347d60b5addd69Dake Gu    public void onDestroyView() {
116f37579e64940bfdd642cc315f6347d60b5addd69Dake Gu        mVideoSurface = null;
117f37579e64940bfdd642cc315f6347d60b5addd69Dake Gu        mState = SURFACE_NOT_CREATED;
118f37579e64940bfdd642cc315f6347d60b5addd69Dake Gu        super.onDestroyView();
119f37579e64940bfdd642cc315f6347d60b5addd69Dake Gu    }
1204702556bfd15c9819a7b2af759aee0f719cd631fsusnata}
121