diff --git a/samples/SupportLeanbackDemos/AndroidManifest.xml b/samples/SupportLeanbackDemos/AndroidManifest.xml
index daaf5bf20..7fd80554a 100644
--- a/samples/SupportLeanbackDemos/AndroidManifest.xml
+++ b/samples/SupportLeanbackDemos/AndroidManifest.xml
@@ -58,9 +58,17 @@
android:exported="true" />
23) {
+ adapter.add(mPipAction);
+ }
adapter.add(mRepeatAction);
if (!THUMBS_PRIMARY) {
adapter.add(mThumbsUpAction);
@@ -275,4 +280,4 @@ abstract class PlaybackControlHelper extends PlaybackControlGlue {
mUpdateProgressRunnable.run();
}
}
-};
\ No newline at end of file
+};
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackControlSupportHelper.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackControlSupportHelper.java
index b857e17c7..a538a441d 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackControlSupportHelper.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackControlSupportHelper.java
@@ -54,6 +54,7 @@ abstract class PlaybackControlSupportHelper extends PlaybackControlSupportGlue {
private PlaybackControlsRow.RepeatAction mRepeatAction;
private PlaybackControlsRow.ThumbsUpAction mThumbsUpAction;
private PlaybackControlsRow.ThumbsDownAction mThumbsDownAction;
+ private PlaybackControlsRow.PictureInPictureAction mPipAction;
private Handler mHandler = new Handler();
private final Runnable mUpdateProgressRunnable = new Runnable() {
@@ -71,6 +72,7 @@ abstract class PlaybackControlSupportHelper extends PlaybackControlSupportGlue {
mThumbsDownAction = new PlaybackControlsRow.ThumbsDownAction(context);
mThumbsDownAction.setIndex(PlaybackControlsRow.ThumbsDownAction.OUTLINE);
mRepeatAction = new PlaybackControlsRow.RepeatAction(context);
+ mPipAction = new PlaybackControlsRow.PictureInPictureAction(context);
}
@Override
@@ -82,6 +84,9 @@ abstract class PlaybackControlSupportHelper extends PlaybackControlSupportGlue {
if (!THUMBS_PRIMARY) {
adapter.add(mThumbsDownAction);
}
+ if (android.os.Build.VERSION.SDK_INT > 23) {
+ adapter.add(mPipAction);
+ }
adapter.add(mRepeatAction);
if (!THUMBS_PRIMARY) {
adapter.add(mThumbsUpAction);
@@ -277,4 +282,4 @@ abstract class PlaybackControlSupportHelper extends PlaybackControlSupportGlue {
mUpdateProgressRunnable.run();
}
}
-};
\ No newline at end of file
+};
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayActivity.java
index 72ef1c482..27052b46e 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayActivity.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayActivity.java
@@ -16,8 +16,12 @@ package com.example.android.leanback;
import android.app.Activity;
import android.os.Bundle;
-public class PlaybackOverlayActivity extends Activity
-{
+import java.util.ArrayList;
+import java.util.List;
+
+public class PlaybackOverlayActivity extends Activity {
+ private List mListeners = new ArrayList<>();
+
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
@@ -25,4 +29,23 @@ public class PlaybackOverlayActivity extends Activity
super.onCreate(savedInstanceState);
setContentView(R.layout.playback_controls);
}
+
+ @Override
+ public void onPictureInPictureModeChanged(boolean pictureInPictureMode) {
+ for (PictureInPictureModeListener listener : mListeners) {
+ listener.onPictureInPictureModeChanged(pictureInPictureMode);
+ }
+ }
+
+ public void registerPictureInPictureModeListener(PictureInPictureModeListener listener) {
+ mListeners.add(listener);
+ }
+
+ public void unregisterPictureInPictureModeListener(PictureInPictureModeListener listener) {
+ mListeners.remove(listener);
+ }
+
+ public interface PictureInPictureModeListener {
+ void onPictureInPictureModeChanged(boolean pictureInPictureMode);
+ }
}
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayFragment.java
index 6658c67f7..58659f17a 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayFragment.java
@@ -42,7 +42,9 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
-public class PlaybackOverlayFragment extends android.support.v17.leanback.app.PlaybackOverlayFragment {
+public class PlaybackOverlayFragment
+ extends android.support.v17.leanback.app.PlaybackOverlayFragment
+ implements PlaybackOverlayActivity.PictureInPictureModeListener {
private static final String TAG = "leanback.PlaybackControlsFragment";
/**
@@ -121,6 +123,15 @@ public class PlaybackOverlayFragment extends android.support.v17.leanback.app.Pl
getAdapter().notifyArrayItemRangeChanged(index, 1);
}
}
+
+ @Override
+ public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPictureMode();
+ return;
+ }
+ super.onActionClicked(action);
+ }
};
mGlue.setOnItemViewClickedListener(mOnItemViewClickedListener);
@@ -160,11 +171,24 @@ public class PlaybackOverlayFragment extends android.support.v17.leanback.app.Pl
super.onStart();
mGlue.setFadingEnabled(true);
mGlue.enableProgressUpdating(mGlue.hasValidMedia() && mGlue.isMediaPlaying());
+ ((PlaybackOverlayActivity) getActivity()).registerPictureInPictureModeListener(this);
}
@Override
public void onStop() {
mGlue.enableProgressUpdating(false);
+ ((PlaybackOverlayActivity) getActivity()).unregisterPictureInPictureModeListener(this);
super.onStop();
}
+
+ @Override
+ public void onPictureInPictureModeChanged(boolean pictureInPictureMode) {
+ if (pictureInPictureMode) {
+ // Hide the controls in picture-in-picture mode.
+ setFadingEnabled(true);
+ fadeOut();
+ } else {
+ setFadingEnabled(mGlue.isMediaPlaying());
+ }
+ }
}
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlaySupportActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlaySupportActivity.java
index a2f5e5a00..56f4cadbf 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlaySupportActivity.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlaySupportActivity.java
@@ -18,8 +18,12 @@ package com.example.android.leanback;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
-public class PlaybackOverlaySupportActivity extends FragmentActivity
-{
+import java.util.ArrayList;
+import java.util.List;
+
+public class PlaybackOverlaySupportActivity extends FragmentActivity {
+ private List mListeners = new ArrayList<>();
+
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
@@ -27,4 +31,23 @@ public class PlaybackOverlaySupportActivity extends FragmentActivity
super.onCreate(savedInstanceState);
setContentView(R.layout.playback_controls_support);
}
+
+ @Override
+ public void onPictureInPictureModeChanged(boolean pictureInPictureMode) {
+ for (PictureInPictureModeListener listener : mListeners) {
+ listener.onPictureInPictureModeChanged(pictureInPictureMode);
+ }
+ }
+
+ public void registerPictureInPictureModeListener(PictureInPictureModeListener listener) {
+ mListeners.add(listener);
+ }
+
+ public void unregisterPictureInPictureModeListener(PictureInPictureModeListener listener) {
+ mListeners.remove(listener);
+ }
+
+ public interface PictureInPictureModeListener {
+ void onPictureInPictureModeChanged(boolean pictureInPictureMode);
+ }
}
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlaySupportFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlaySupportFragment.java
index 0a93027a6..2c0306d52 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlaySupportFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlaySupportFragment.java
@@ -44,7 +44,9 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
-public class PlaybackOverlaySupportFragment extends android.support.v17.leanback.app.PlaybackOverlaySupportFragment {
+public class PlaybackOverlaySupportFragment
+ extends android.support.v17.leanback.app.PlaybackOverlaySupportFragment
+ implements PlaybackOverlaySupportActivity.PictureInPictureModeListener {
private static final String TAG = "leanback.PlaybackControlsFragment";
/**
@@ -123,6 +125,15 @@ public class PlaybackOverlaySupportFragment extends android.support.v17.leanback
getAdapter().notifyArrayItemRangeChanged(index, 1);
}
}
+
+ @Override
+ public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPictureMode();
+ return;
+ }
+ super.onActionClicked(action);
+ }
};
mGlue.setOnItemViewClickedListener(mOnItemViewClickedListener);
@@ -162,11 +173,25 @@ public class PlaybackOverlaySupportFragment extends android.support.v17.leanback
super.onStart();
mGlue.setFadingEnabled(true);
mGlue.enableProgressUpdating(mGlue.hasValidMedia() && mGlue.isMediaPlaying());
+ ((PlaybackOverlaySupportActivity) getActivity()).registerPictureInPictureModeListener(this);
}
@Override
public void onStop() {
mGlue.enableProgressUpdating(false);
+ ((PlaybackOverlaySupportActivity) getActivity()).unregisterPictureInPictureModeListener(
+ this);
super.onStop();
}
+
+ @Override
+ public void onPictureInPictureModeChanged(boolean pictureInPictureMode) {
+ if (pictureInPictureMode) {
+ // Hide the controls in picture-in-picture mode.
+ setFadingEnabled(true);
+ fadeOut();
+ } else {
+ setFadingEnabled(mGlue.isMediaPlaying());
+ }
+ }
}