summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Maitri Mangal <maitrim@google.com> 2024-03-21 18:45:05 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-03-21 18:45:05 +0000
commitb231a189b970b9c180b02f956a867a8a7dda26cc (patch)
treee4498c381e82e61117b95dc0b3a31c09ccf11e4b
parent9a1acc6ba01676922d1041c5b33644b8fc6f6a0a (diff)
parent3f14afe81a609bc56279308e6adf2d75af2919fc (diff)
Merge "Hiding the PiP Menu after 10s of inactivity" into main
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java17
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java36
2 files changed, 38 insertions, 15 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
index 62156fc7443b..6b5bdd2299e1 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
@@ -64,6 +64,8 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis
private TvPipBackgroundView mPipBackgroundView;
private boolean mIsReloading;
+ private static final int PIP_MENU_FORCE_CLOSE_DELAY_MS = 10_000;
+ private final Runnable mClosePipMenuRunnable = this::closeMenu;
@TvPipMenuMode
private int mCurrentMenuMode = MODE_NO_MENU;
@@ -280,6 +282,7 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis
ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: closeMenu()", TAG);
requestMenuMode(MODE_NO_MENU);
+ mMainHandler.removeCallbacks(mClosePipMenuRunnable);
}
@Override
@@ -488,13 +491,17 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis
private void requestMenuMode(@TvPipMenuMode int menuMode) {
if (isMenuOpen() == isMenuOpen(menuMode)) {
+ if (mMainHandler.hasCallbacks(mClosePipMenuRunnable)) {
+ mMainHandler.removeCallbacks(mClosePipMenuRunnable);
+ mMainHandler.postDelayed(mClosePipMenuRunnable, PIP_MENU_FORCE_CLOSE_DELAY_MS);
+ }
// No need to request a focus change. We can directly switch to the new mode.
switchToMenuMode(menuMode);
} else {
if (isMenuOpen(menuMode)) {
+ mMainHandler.postDelayed(mClosePipMenuRunnable, PIP_MENU_FORCE_CLOSE_DELAY_MS);
mMenuModeOnFocus = menuMode;
}
-
// Send a request to gain window focus if the menu is open, or lose window focus
// otherwise. Once the focus change happens, we will request the new mode in the
// callback {@link #onPipWindowFocusChanged}.
@@ -584,6 +591,14 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis
}
@Override
+ public void onUserInteracting() {
+ ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ "%s: onUserInteracting - mCurrentMenuMode=%s", TAG, getMenuModeString());
+ mMainHandler.removeCallbacks(mClosePipMenuRunnable);
+ mMainHandler.postDelayed(mClosePipMenuRunnable, PIP_MENU_FORCE_CLOSE_DELAY_MS);
+
+ }
+ @Override
public void onPipMovement(int keycode) {
ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: onPipMovement - mCurrentMenuMode=%s", TAG, getMenuModeString());
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java
index b259e8d584a6..4a767ef2a113 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java
@@ -491,30 +491,33 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == ACTION_UP) {
-
if (event.getKeyCode() == KEYCODE_BACK) {
mListener.onExitCurrentMenuMode();
return true;
}
-
- if (mCurrentMenuMode == MODE_MOVE_MENU && !mA11yManager.isEnabled()) {
- switch (event.getKeyCode()) {
- case KEYCODE_DPAD_UP:
- case KEYCODE_DPAD_DOWN:
- case KEYCODE_DPAD_LEFT:
- case KEYCODE_DPAD_RIGHT:
+ switch (event.getKeyCode()) {
+ case KEYCODE_DPAD_UP:
+ case KEYCODE_DPAD_DOWN:
+ case KEYCODE_DPAD_LEFT:
+ case KEYCODE_DPAD_RIGHT:
+ mListener.onUserInteracting();
+ if (mCurrentMenuMode == MODE_MOVE_MENU && !mA11yManager.isEnabled()) {
mListener.onPipMovement(event.getKeyCode());
return true;
- case KEYCODE_ENTER:
- case KEYCODE_DPAD_CENTER:
+ }
+ break;
+ case KEYCODE_ENTER:
+ case KEYCODE_DPAD_CENTER:
+ mListener.onUserInteracting();
+ if (mCurrentMenuMode == MODE_MOVE_MENU && !mA11yManager.isEnabled()) {
mListener.onExitCurrentMenuMode();
return true;
- default:
- // Dispatch key event as normal below
- }
+ }
+ break;
+ default:
+ // Dispatch key event as normal below
}
}
-
return super.dispatchKeyEvent(event);
}
@@ -637,6 +640,11 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L
interface Listener {
/**
+ * Called when any button (that affects the menu) on current menu mode was pressed.
+ */
+ void onUserInteracting();
+
+ /**
* Called when a button for exiting the current menu mode was pressed.
*/
void onExitCurrentMenuMode();