I am using Master/Detail layout in a tablet, on the left few buttons to open several fragments, one of the fragments contains youtube player.
The Problem,
When the youtube player is full screen, and i press back button, The activity onBackPressed is called, and the whole activity is closed.
What i have tried,
1- Added on KeyListener for parent fragment (which contains the Youtube Fragment) and handle when click on back button, but this listener is called only if the player is not fullscreen, otherwise it is not called,
rootView.setFocusableInTouchMode(true);
rootView.requestFocus();
rootView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
try {
// Close full screen
return true;
} catch (Exception e) {
AHHExceptionHandler.handleException(e);
}
}
return false;
}
});
2- Added onKeyListener to youtubeFragment View to check if it is full screen then close the full screen mode
youTubeFragment.getView().setFocusableInTouchMode(true);
youTubeFragment.getView().requestFocus();
youTubeFragment.getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
try {
youTubePlayer.setFullscreen(false);
return true;
} catch (Exception e) {
AHHExceptionHandler.handleException(e);
}
}
return false;
}
});
And this is also not called in all cases.
I need to handle the hardware back button while the youtube player is in fullscreen, the fullscreen mode is closed and the application is in its previous state.
Thanks.
Edit 1: - I want to handle this inside the fragment, instead of handling it in the parent Activity, I already handling it inside the parent activity, but I don't like this solution.
Just to add to Andre's reply.
In your parent Activity add:
public YouTubePlayer youTubePlayer;
public boolean isYouTubePlayerFullScreen;
In your fragment add:
MainActivity mainActivity = (MainActivity) getActivity();
Then, on YouTubePlayerFragment initialization:
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) {
mainActivity.youTubePlayer = player;
player.loadVideo(videoId);
player.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() {
@Override
public void onFullscreen(boolean b) {
mainActivity.isYouTubePlayerFullScreen = b;
}
});
}
Now your Activity has access to YouTubePlayer and information if player is full screen or not.
Next, inside your Activity, override onBackPressed like this:
@Override
public void onBackPressed() {
if (youTubePlayer != null && isYouTubePlayerFullScreen){
youTubePlayer.setFullscreen(false);
} else {
super.onBackPressed();
}
}
You can override onBackPressed() in your activity and in case your player is in fullscreen, you can handle it there as follows:
@Override
public void onBackPressed() {
if (youtubePlayer != null && isFullscreen) {
// if fullscreen, set fullscreen false
youtubePlayer.setFullscreen(false);
} else {
// if NOT fullscreen, perform default call on back press
super.onBackPressed();
}
}
P.S. In above code fragment,
isFullscreenis instance variable of our activity and is synced withyoutubePlayerstate from withinOnFullscreenListenerset onyoutubePlayer.setOnFullScreenListener().Hope that makes sense :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With