Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip/Pip.java +10 −4 Original line number Diff line number Diff line Loading @@ -112,11 +112,17 @@ public interface Pip { default void showPictureInPictureMenu() {} /** * Called by NavigationBar in order to listen in for PiP bounds change. This is mostly used * for times where the PiP bounds could conflict with SystemUI elements, such as a stashed * PiP and the Back-from-Edge gesture. * Called by NavigationBar and TaskbarDelegate in order to listen in for PiP bounds change. This * is mostly used for times where the PiP bounds could conflict with SystemUI elements, such as * a stashed PiP and the Back-from-Edge gesture. */ default void setPipExclusionBoundsChangeListener(Consumer<Rect> listener) { } default void addPipExclusionBoundsChangeListener(Consumer<Rect> listener) { } /** * Remove a callback added previously. This is used when NavigationBar is removed from the * view hierarchy or destroyed. */ default void removePipExclusionBoundsChangeListener(Consumer<Rect> listener) { } /** * Dump the current state and information if need. Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsState.java +18 −8 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ import com.android.wm.shell.common.DisplayLayout; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.function.Consumer; Loading Loading @@ -89,7 +91,7 @@ public final class PipBoundsState { private @Nullable Runnable mOnMinimalSizeChangeCallback; private @Nullable TriConsumer<Boolean, Integer, Boolean> mOnShelfVisibilityChangeCallback; private @Nullable Consumer<Rect> mOnPipExclusionBoundsChangeCallback; private List<Consumer<Rect>> mOnPipExclusionBoundsChangeCallbacks = new ArrayList<>(); public PipBoundsState(@NonNull Context context) { mContext = context; Loading @@ -108,8 +110,8 @@ public final class PipBoundsState { /** Set the current PIP bounds. */ public void setBounds(@NonNull Rect bounds) { mBounds.set(bounds); if (mOnPipExclusionBoundsChangeCallback != null) { mOnPipExclusionBoundsChangeCallback.accept(bounds); for (Consumer<Rect> callback : mOnPipExclusionBoundsChangeCallbacks) { callback.accept(bounds); } } Loading Loading @@ -407,17 +409,25 @@ public final class PipBoundsState { } /** * Set a callback to watch out for PiP bounds. This is mostly used by SystemUI's * Add a callback to watch out for PiP bounds. This is mostly used by SystemUI's * Back-gesture handler, to avoid conflicting with PiP when it's stashed. */ public void setPipExclusionBoundsChangeCallback( public void addPipExclusionBoundsChangeCallback( @Nullable Consumer<Rect> onPipExclusionBoundsChangeCallback) { mOnPipExclusionBoundsChangeCallback = onPipExclusionBoundsChangeCallback; if (mOnPipExclusionBoundsChangeCallback != null) { mOnPipExclusionBoundsChangeCallback.accept(getBounds()); mOnPipExclusionBoundsChangeCallbacks.add(onPipExclusionBoundsChangeCallback); for (Consumer<Rect> callback : mOnPipExclusionBoundsChangeCallbacks) { callback.accept(getBounds()); } } /** * Remove a callback that was previously added. */ public void removePipExclusionBoundsChangeCallback( @Nullable Consumer<Rect> onPipExclusionBoundsChangeCallback) { mOnPipExclusionBoundsChangeCallbacks.remove(onPipExclusionBoundsChangeCallback); } /** Source of truth for the current bounds of PIP that may be in motion. */ public static class MotionBoundsState { /** The bounds used when PIP is in motion (e.g. during a drag or animation) */ Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +9 −2 Original line number Diff line number Diff line Loading @@ -843,9 +843,16 @@ public class PipController implements PipTransitionController.PipTransitionCallb } @Override public void setPipExclusionBoundsChangeListener(Consumer<Rect> listener) { public void addPipExclusionBoundsChangeListener(Consumer<Rect> listener) { mMainExecutor.execute(() -> { mPipBoundsState.setPipExclusionBoundsChangeCallback(listener); mPipBoundsState.addPipExclusionBoundsChangeCallback(listener); }); } @Override public void removePipExclusionBoundsChangeListener(Consumer<Rect> listener) { mMainExecutor.execute(() -> { mPipBoundsState.removePipExclusionBoundsChangeCallback(listener); }); } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipBoundsStateTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -188,7 +188,7 @@ public class PipBoundsStateTest extends ShellTestCase { final Rect newBounds = new Rect(50, 50, 100, 75); mPipBoundsState.setBounds(currentBounds); mPipBoundsState.setPipExclusionBoundsChangeCallback(callback); mPipBoundsState.addPipExclusionBoundsChangeCallback(callback); // Setting the listener immediately calls back with the current bounds. verify(callback).accept(currentBounds); Loading packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +2 −1 Original line number Diff line number Diff line Loading @@ -628,7 +628,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mNavBarHelper.registerNavTaskStateUpdater(mNavbarTaskbarStateUpdater); mSplitScreenOptional.ifPresent(mNavigationBarView::registerDockedListener); mPipOptional.ifPresent(mNavigationBarView::registerPipExclusionBoundsChangeListener); mPipOptional.ifPresent(mNavigationBarView::addPipExclusionBoundsChangeListener); prepareNavigationBarView(); checkNavBarModes(); Loading Loading @@ -699,6 +699,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mHandler.removeCallbacks(mOnVariableDurationHomeLongClick); mHandler.removeCallbacks(mEnableLayoutTransitions); mNavBarHelper.removeNavTaskStateUpdater(mNavbarTaskbarStateUpdater); mPipOptional.ifPresent(mNavigationBarView::removePipExclusionBoundsChangeListener); mFrame = null; mNavigationBarView = null; mOrientationHandle = null; Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip/Pip.java +10 −4 Original line number Diff line number Diff line Loading @@ -112,11 +112,17 @@ public interface Pip { default void showPictureInPictureMenu() {} /** * Called by NavigationBar in order to listen in for PiP bounds change. This is mostly used * for times where the PiP bounds could conflict with SystemUI elements, such as a stashed * PiP and the Back-from-Edge gesture. * Called by NavigationBar and TaskbarDelegate in order to listen in for PiP bounds change. This * is mostly used for times where the PiP bounds could conflict with SystemUI elements, such as * a stashed PiP and the Back-from-Edge gesture. */ default void setPipExclusionBoundsChangeListener(Consumer<Rect> listener) { } default void addPipExclusionBoundsChangeListener(Consumer<Rect> listener) { } /** * Remove a callback added previously. This is used when NavigationBar is removed from the * view hierarchy or destroyed. */ default void removePipExclusionBoundsChangeListener(Consumer<Rect> listener) { } /** * Dump the current state and information if need. Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsState.java +18 −8 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ import com.android.wm.shell.common.DisplayLayout; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.function.Consumer; Loading Loading @@ -89,7 +91,7 @@ public final class PipBoundsState { private @Nullable Runnable mOnMinimalSizeChangeCallback; private @Nullable TriConsumer<Boolean, Integer, Boolean> mOnShelfVisibilityChangeCallback; private @Nullable Consumer<Rect> mOnPipExclusionBoundsChangeCallback; private List<Consumer<Rect>> mOnPipExclusionBoundsChangeCallbacks = new ArrayList<>(); public PipBoundsState(@NonNull Context context) { mContext = context; Loading @@ -108,8 +110,8 @@ public final class PipBoundsState { /** Set the current PIP bounds. */ public void setBounds(@NonNull Rect bounds) { mBounds.set(bounds); if (mOnPipExclusionBoundsChangeCallback != null) { mOnPipExclusionBoundsChangeCallback.accept(bounds); for (Consumer<Rect> callback : mOnPipExclusionBoundsChangeCallbacks) { callback.accept(bounds); } } Loading Loading @@ -407,17 +409,25 @@ public final class PipBoundsState { } /** * Set a callback to watch out for PiP bounds. This is mostly used by SystemUI's * Add a callback to watch out for PiP bounds. This is mostly used by SystemUI's * Back-gesture handler, to avoid conflicting with PiP when it's stashed. */ public void setPipExclusionBoundsChangeCallback( public void addPipExclusionBoundsChangeCallback( @Nullable Consumer<Rect> onPipExclusionBoundsChangeCallback) { mOnPipExclusionBoundsChangeCallback = onPipExclusionBoundsChangeCallback; if (mOnPipExclusionBoundsChangeCallback != null) { mOnPipExclusionBoundsChangeCallback.accept(getBounds()); mOnPipExclusionBoundsChangeCallbacks.add(onPipExclusionBoundsChangeCallback); for (Consumer<Rect> callback : mOnPipExclusionBoundsChangeCallbacks) { callback.accept(getBounds()); } } /** * Remove a callback that was previously added. */ public void removePipExclusionBoundsChangeCallback( @Nullable Consumer<Rect> onPipExclusionBoundsChangeCallback) { mOnPipExclusionBoundsChangeCallbacks.remove(onPipExclusionBoundsChangeCallback); } /** Source of truth for the current bounds of PIP that may be in motion. */ public static class MotionBoundsState { /** The bounds used when PIP is in motion (e.g. during a drag or animation) */ Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +9 −2 Original line number Diff line number Diff line Loading @@ -843,9 +843,16 @@ public class PipController implements PipTransitionController.PipTransitionCallb } @Override public void setPipExclusionBoundsChangeListener(Consumer<Rect> listener) { public void addPipExclusionBoundsChangeListener(Consumer<Rect> listener) { mMainExecutor.execute(() -> { mPipBoundsState.setPipExclusionBoundsChangeCallback(listener); mPipBoundsState.addPipExclusionBoundsChangeCallback(listener); }); } @Override public void removePipExclusionBoundsChangeListener(Consumer<Rect> listener) { mMainExecutor.execute(() -> { mPipBoundsState.removePipExclusionBoundsChangeCallback(listener); }); } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipBoundsStateTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -188,7 +188,7 @@ public class PipBoundsStateTest extends ShellTestCase { final Rect newBounds = new Rect(50, 50, 100, 75); mPipBoundsState.setBounds(currentBounds); mPipBoundsState.setPipExclusionBoundsChangeCallback(callback); mPipBoundsState.addPipExclusionBoundsChangeCallback(callback); // Setting the listener immediately calls back with the current bounds. verify(callback).accept(currentBounds); Loading
packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +2 −1 Original line number Diff line number Diff line Loading @@ -628,7 +628,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mNavBarHelper.registerNavTaskStateUpdater(mNavbarTaskbarStateUpdater); mSplitScreenOptional.ifPresent(mNavigationBarView::registerDockedListener); mPipOptional.ifPresent(mNavigationBarView::registerPipExclusionBoundsChangeListener); mPipOptional.ifPresent(mNavigationBarView::addPipExclusionBoundsChangeListener); prepareNavigationBarView(); checkNavBarModes(); Loading Loading @@ -699,6 +699,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mHandler.removeCallbacks(mOnVariableDurationHomeLongClick); mHandler.removeCallbacks(mEnableLayoutTransitions); mNavBarHelper.removeNavTaskStateUpdater(mNavbarTaskbarStateUpdater); mPipOptional.ifPresent(mNavigationBarView::removePipExclusionBoundsChangeListener); mFrame = null; mNavigationBarView = null; mOrientationHandle = null; Loading