Added onMultiWindowChanged and onPictureInPictureChanged methods to Fragement class
Bug: 26688489
Change-Id: I611444b29199b4686c9f78dbdd33c9b71820aec4
diff --git a/api/current.txt b/api/current.txt
index 61ae1e0..19490ea 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -4422,9 +4422,11 @@
method public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
method public deprecated void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
method public void onLowMemory();
+ method public void onMultiWindowChanged(boolean);
method public boolean onOptionsItemSelected(android.view.MenuItem);
method public void onOptionsMenuClosed(android.view.Menu);
method public void onPause();
+ method public void onPictureInPictureChanged(boolean);
method public void onPrepareOptionsMenu(android.view.Menu);
method public void onRequestPermissionsResult(int, java.lang.String[], int[]);
method public void onResume();
@@ -4505,9 +4507,11 @@
method public void dispatchDestroy();
method public void dispatchDestroyView();
method public void dispatchLowMemory();
+ method public void dispatchMultiWindowChanged(boolean);
method public boolean dispatchOptionsItemSelected(android.view.MenuItem);
method public void dispatchOptionsMenuClosed(android.view.Menu);
method public void dispatchPause();
+ method public void dispatchPictureInPictureChanged(boolean);
method public boolean dispatchPrepareOptionsMenu(android.view.Menu);
method public void dispatchResume();
method public void dispatchStart();
diff --git a/api/system-current.txt b/api/system-current.txt
index 321d817..796407b 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -4555,9 +4555,11 @@
method public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
method public deprecated void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
method public void onLowMemory();
+ method public void onMultiWindowChanged(boolean);
method public boolean onOptionsItemSelected(android.view.MenuItem);
method public void onOptionsMenuClosed(android.view.Menu);
method public void onPause();
+ method public void onPictureInPictureChanged(boolean);
method public void onPrepareOptionsMenu(android.view.Menu);
method public void onRequestPermissionsResult(int, java.lang.String[], int[]);
method public void onResume();
@@ -4638,9 +4640,11 @@
method public void dispatchDestroy();
method public void dispatchDestroyView();
method public void dispatchLowMemory();
+ method public void dispatchMultiWindowChanged(boolean);
method public boolean dispatchOptionsItemSelected(android.view.MenuItem);
method public void dispatchOptionsMenuClosed(android.view.Menu);
method public void dispatchPause();
+ method public void dispatchPictureInPictureChanged(boolean);
method public boolean dispatchPrepareOptionsMenu(android.view.Menu);
method public void dispatchResume();
method public void dispatchStart();
diff --git a/api/test-current.txt b/api/test-current.txt
index ad45752..8ec5b1f 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -4422,9 +4422,11 @@
method public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
method public deprecated void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
method public void onLowMemory();
+ method public void onMultiWindowChanged(boolean);
method public boolean onOptionsItemSelected(android.view.MenuItem);
method public void onOptionsMenuClosed(android.view.Menu);
method public void onPause();
+ method public void onPictureInPictureChanged(boolean);
method public void onPrepareOptionsMenu(android.view.Menu);
method public void onRequestPermissionsResult(int, java.lang.String[], int[]);
method public void onResume();
@@ -4505,9 +4507,11 @@
method public void dispatchDestroy();
method public void dispatchDestroyView();
method public void dispatchLowMemory();
+ method public void dispatchMultiWindowChanged(boolean);
method public boolean dispatchOptionsItemSelected(android.view.MenuItem);
method public void dispatchOptionsMenuClosed(android.view.Menu);
method public void dispatchPause();
+ method public void dispatchPictureInPictureChanged(boolean);
method public boolean dispatchPrepareOptionsMenu(android.view.Menu);
method public void dispatchResume();
method public void dispatchStart();
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 378e448..acd4ab8 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1837,6 +1837,7 @@
public void onMultiWindowChanged(boolean inMultiWindow) {
if (DEBUG_LIFECYCLE) Slog.v(TAG,
"onMultiWindowChanged " + this + ": " + inMultiWindow);
+ mFragments.dispatchMultiWindowChanged(inMultiWindow);
if (mWindow != null) {
mWindow.onMultiWindowChanged();
}
@@ -1862,9 +1863,11 @@
*
* @param inPictureInPicture True if the activity is in picture-in-picture mode.
*/
+ @CallSuper
public void onPictureInPictureChanged(boolean inPictureInPicture) {
if (DEBUG_LIFECYCLE) Slog.v(TAG,
"onPictureInPictureChanged " + this + ": " + inPictureInPicture);
+ mFragments.dispatchPictureInPictureChanged(inPictureInPicture);
}
/**
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 20eaf0b..688c9f8 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -1576,6 +1576,25 @@
public void onSaveInstanceState(Bundle outState) {
}
+ /**
+ * Called when the Fragment's activity changes from fullscreen mode to multi-window mode and
+ * visa-versa. This is generally tied to {@link Activity#onMultiWindowChanged} of the containing
+ * Activity.
+ *
+ * @param inMultiWindow True if the activity is in multi-window mode.
+ */
+ public void onMultiWindowChanged(boolean inMultiWindow) {
+ }
+
+ /**
+ * Called by the system when the activity changes to and from picture-in-picture mode. This is
+ * generally tied to {@link Activity#onPictureInPictureChanged} of the containing Activity.
+ *
+ * @param inPictureInPicture True if the activity is in picture-in-picture mode.
+ */
+ public void onPictureInPictureChanged(boolean inPictureInPicture) {
+ }
+
public void onConfigurationChanged(Configuration newConfig) {
mCalled = true;
}
@@ -2308,6 +2327,20 @@
}
}
+ void performMultiWindowChanged(boolean inMultiWindow) {
+ onMultiWindowChanged(inMultiWindow);
+ if (mChildFragmentManager != null) {
+ mChildFragmentManager.dispatchMultiWindowChanged(inMultiWindow);
+ }
+ }
+
+ void performPictureInPictureChanged(boolean inPictureInPicture) {
+ onPictureInPictureChanged(inPictureInPicture);
+ if (mChildFragmentManager != null) {
+ mChildFragmentManager.dispatchPictureInPictureChanged(inPictureInPicture);
+ }
+ }
+
void performConfigurationChanged(Configuration newConfig) {
onConfigurationChanged(newConfig);
if (mChildFragmentManager != null) {
diff --git a/core/java/android/app/FragmentController.java b/core/java/android/app/FragmentController.java
index 28dadfa..a9270bc 100644
--- a/core/java/android/app/FragmentController.java
+++ b/core/java/android/app/FragmentController.java
@@ -219,6 +219,28 @@
}
/**
+ * Lets all Fragments managed by the controller's FragmentManager know the multi-window mode of
+ * the activity changed.
+ * <p>Call when the multi-window mode of the activity changed.
+ *
+ * @see Fragment#onMultiWindowChanged
+ */
+ public void dispatchMultiWindowChanged(boolean inMultiWindow) {
+ mHost.mFragmentManager.dispatchMultiWindowChanged(inMultiWindow);
+ }
+
+ /**
+ * Lets all Fragments managed by the controller's FragmentManager know the picture-in-picture
+ * mode of the activity changed.
+ * <p>Call when the picture-in-picture mode of the activity changed.
+ *
+ * @see Fragment#onPictureInPictureChanged
+ */
+ public void dispatchPictureInPictureChanged(boolean inPictureInPicture) {
+ mHost.mFragmentManager.dispatchPictureInPictureChanged(inPictureInPicture);
+ }
+
+ /**
* Lets all Fragments managed by the controller's FragmentManager
* know a configuration change occurred.
* <p>Call when there is a configuration change.
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index 84ae09d..32fec84 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -1987,7 +1987,31 @@
mContainer = null;
mParent = null;
}
-
+
+ public void dispatchMultiWindowChanged(boolean inMultiWindow) {
+ if (mAdded == null) {
+ return;
+ }
+ for (int i = mAdded.size() - 1; i >= 0; --i) {
+ final Fragment f = mAdded.get(i);
+ if (f != null) {
+ f.performMultiWindowChanged(inMultiWindow);
+ }
+ }
+ }
+
+ public void dispatchPictureInPictureChanged(boolean inPictureInPicture) {
+ if (mAdded == null) {
+ return;
+ }
+ for (int i = mAdded.size() - 1; i >= 0; --i) {
+ final Fragment f = mAdded.get(i);
+ if (f != null) {
+ f.performPictureInPictureChanged(inPictureInPicture);
+ }
+ }
+ }
+
public void dispatchConfigurationChanged(Configuration newConfig) {
if (mAdded != null) {
for (int i=0; i<mAdded.size(); i++) {