Video pausing with error "Unauthorized overlay"

Vikram Singh picture Vikram Singh · Jul 26, 2015 · Viewed 8.4k times · Source

I am getting following error while playing video in fullscreen mode (only in fullscreen). I am hiding all other components in the layout when it goes fullscreen but it says that android:id/statusBarBackground is the view that is causing the problem. How do I control that?

YouTube video playback stopped due to unauthorized overlay on top of player. The YouTubePlayerView is obscured by android.view.View{16771a9d V.ED.... ........ 0,0-1920,75 #102002f android:id/statusBarBackground}. The view is inside the YouTubePlayerView, with the distance in px between each edge of the obscuring view and the YouTubePlayerView being: left: 0, top: 0, right: 0, bottom: 1005.. 

My layout looks like this:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/videoListLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="top"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:background="@drawable/heading" >

            <TextView
                android:id="@+id/topDisplayArea"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:text="@string/app_desc"
                android:textColor="@color/topDisplayAreaFG"
                android:textSize="18sp"
                android:textStyle="bold"
                android:typeface="serif" >
            </TextView>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_alignParentRight="true" >
                <ImageButton
                    android:id="@+id/mp_shareCommonButton"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_marginLeft="1dp"
                    android:layout_marginRight="1dp"
                    android:background="@drawable/widget_button"
                    android:contentDescription="Share"
                    android:cropToPadding="true"
                    android:src="@android:drawable/ic_menu_preferences" >
                </ImageButton>
            </LinearLayout>
        </RelativeLayout>

        <LinearLayout
            android:id="@+id/infoPanel"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="horizontal">

            <ProgressBar
                android:id="@+id/retrievalProgressIndicator"
                style="?android:attr/progressBarStyle"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_gravity="center"
                android:indeterminate="true" />

            <TextView
                android:id="@+id/refreshContentLabel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:text="Connecting to server..."
                android:textColor="@color/topDisplayAreaFG"
                android:textSize="18sp"
                android:typeface="sans" >
            </TextView>
        </LinearLayout>


        <fragment
            class="VideosActivity$VideoListFragment"
            android:id="@+id/list_fragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/video_box"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:orientation="vertical">

        <ImageButton
            android:id="@+id/close_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:src="@android:drawable/btn_dialog"
            android:onClick="onClickClose"/>

        <fragment
            class="VideosActivity$VideoFragment"
            android:id="@+id/video_fragment_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </LinearLayout>

</merge>

I am using FullScreenListener and in onFullScreen function, I hide all other elements in the layout except the videofragment.

@Override
    public void onFullscreen(boolean isFullscreen) {
        this.isFullscreen = isFullscreen;

        layout();
    }

Also I am adding following flag to the video player

player.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT);

Answer

Sebastiano picture Sebastiano · Jul 29, 2015

Taken from the documentation

FULLSCREEN_FLAG_CUSTOM_LAYOUT disables the default fullscreen layout handler, enabling you to control the transition to fullscreen layout manually.

As you see, setting that flag leaves to you the task of handling the UI elements' visibility, in particular those belonging to the System UI (status bar, navigation bar).

For this reason, if you fail to hide the status bar, the YouTube player will detect that a view is being displayed over it and will therefore throw that warning.


You can try with one of the following additional flags

FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE: causes the player to automatically enter fullscreen whenever the device enters landscape orientation.

FULLSCREEN_FLAG_CONTROL_ORIENTATION: enables automatic control of the orientation.

FULLSCREEN_FLAG_CONTROL_SYSTEM_UI: enables automatic control of system UI.

FULLSCREEN_FLAG_CUSTOM_LAYOUT: disables the default fullscreen layout handler, enabling you to control the transition to fullscreen layout manually.

or, if you actually need to have manual control over the System UI, keep using the custom layout flag and be sure to handle the UI elements' visibility.