Vikram Singh Vikram Singh - 1 month ago 7
Android Question

Video pausing with error "Unauthorized overlay"

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

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.