VideoFragment.java revision aa49439ba6276137f94fcdc1bf4f69b78833dad6
14702556bfd15c9819a7b2af759aee0f719cd631fsusnata/*
24702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Copyright (C) 2016 The Android Open Source Project
34702556bfd15c9819a7b2af759aee0f719cd631fsusnata *
44702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
54702556bfd15c9819a7b2af759aee0f719cd631fsusnata * in compliance with the License. You may obtain a copy of the License at
64702556bfd15c9819a7b2af759aee0f719cd631fsusnata *
74702556bfd15c9819a7b2af759aee0f719cd631fsusnata * http://www.apache.org/licenses/LICENSE-2.0
84702556bfd15c9819a7b2af759aee0f719cd631fsusnata *
94702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Unless required by applicable law or agreed to in writing, software distributed under the License
104702556bfd15c9819a7b2af759aee0f719cd631fsusnata * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
114702556bfd15c9819a7b2af759aee0f719cd631fsusnata * or implied. See the License for the specific language governing permissions and limitations under
124702556bfd15c9819a7b2af759aee0f719cd631fsusnata * the License.
134702556bfd15c9819a7b2af759aee0f719cd631fsusnata */
144702556bfd15c9819a7b2af759aee0f719cd631fsusnatapackage android.support.v17.leanback.app;
154702556bfd15c9819a7b2af759aee0f719cd631fsusnata
164702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.os.Bundle;
174702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.support.v17.leanback.R;
184702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.LayoutInflater;
194702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.SurfaceHolder;
204702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.SurfaceView;
214702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.View;
224702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.ViewGroup;
234702556bfd15c9819a7b2af759aee0f719cd631fsusnata
244702556bfd15c9819a7b2af759aee0f719cd631fsusnata/**
254702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Subclass of {@link PlaybackFragment} that is responsible for providing a {@link SurfaceView}
264702556bfd15c9819a7b2af759aee0f719cd631fsusnata * and rendering video.
274702556bfd15c9819a7b2af759aee0f719cd631fsusnata */
284702556bfd15c9819a7b2af759aee0f719cd631fsusnatapublic class VideoFragment extends PlaybackFragment {
29aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    static final int SURFACE_NOT_CREATED = 0;
30aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    static final int SURFACE_CREATED = 1;
31aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
32aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    SurfaceView mVideoSurface;
33aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    SurfaceHolder.Callback mMediaPlaybackCallback;
34aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
35aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    int mState = SURFACE_NOT_CREATED;
364702556bfd15c9819a7b2af759aee0f719cd631fsusnata
374702556bfd15c9819a7b2af759aee0f719cd631fsusnata    @Override
384702556bfd15c9819a7b2af759aee0f719cd631fsusnata    public View onCreateView(
394702556bfd15c9819a7b2af759aee0f719cd631fsusnata            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
40c2168ad5902b189f3c634e47cd956f99df17fbabsusnata        ViewGroup root = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState);
41aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata        mVideoSurface = (SurfaceView) getActivity().getLayoutInflater().inflate(
42aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                R.layout.lb_video_surface, root, false);
43c2168ad5902b189f3c634e47cd956f99df17fbabsusnata        root.addView(mVideoSurface, 0);
44aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata        mVideoSurface.getHolder().addCallback(new SurfaceHolder.Callback() {
45aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
46aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            @Override
47aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            public void surfaceCreated(SurfaceHolder holder) {
48aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                if (mMediaPlaybackCallback != null) {
49aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                    mMediaPlaybackCallback.surfaceCreated(holder);
50aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                }
51aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                mState = SURFACE_CREATED;
52aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            }
53aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
54aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            @Override
55aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
56aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                if (mMediaPlaybackCallback != null) {
57aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                    mMediaPlaybackCallback.surfaceChanged(holder, format, width, height);
58aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                }
59aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            }
60aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
61aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            @Override
62aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            public void surfaceDestroyed(SurfaceHolder holder) {
63aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                if (mMediaPlaybackCallback != null) {
64aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                    mMediaPlaybackCallback.surfaceDestroyed(holder);
65aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                }
66aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                mState = SURFACE_NOT_CREATED;
67aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            }
68aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata        });
694702556bfd15c9819a7b2af759aee0f719cd631fsusnata        setBackgroundType(PlaybackFragment.BG_LIGHT);
704702556bfd15c9819a7b2af759aee0f719cd631fsusnata        return root;
714702556bfd15c9819a7b2af759aee0f719cd631fsusnata    }
724702556bfd15c9819a7b2af759aee0f719cd631fsusnata
734702556bfd15c9819a7b2af759aee0f719cd631fsusnata    /**
744702556bfd15c9819a7b2af759aee0f719cd631fsusnata     * Adds {@link SurfaceHolder.Callback} to {@link android.view.SurfaceView}.
754702556bfd15c9819a7b2af759aee0f719cd631fsusnata     */
764702556bfd15c9819a7b2af759aee0f719cd631fsusnata    public void setSurfaceHolderCallback(SurfaceHolder.Callback callback) {
774702556bfd15c9819a7b2af759aee0f719cd631fsusnata        mMediaPlaybackCallback = callback;
78aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
79aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata        if (callback != null) {
80aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            if (mState == SURFACE_CREATED) {
81aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata                mMediaPlaybackCallback.surfaceCreated(mVideoSurface.getHolder());
82aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            }
834702556bfd15c9819a7b2af759aee0f719cd631fsusnata        }
844702556bfd15c9819a7b2af759aee0f719cd631fsusnata    }
85aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
86aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    /**
87aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata     * Returns the surface view.
88aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata     */
89aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    public SurfaceView getSurfaceView() {
90aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata        return mVideoSurface;
91aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    }
924702556bfd15c9819a7b2af759aee0f719cd631fsusnata}
93