Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6e9fc6c7 authored by Hongwei Wang's avatar Hongwei Wang Committed by Android (Google) Code Review
Browse files

Merge "Do not request focus on PiP menu if IME is up" into main

parents 77b450c9 4e7f5949
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -123,11 +123,15 @@ public abstract class Pip1Module {
    static PhonePipMenuController providesPipPhoneMenuController(Context context,
            PipBoundsState pipBoundsState, PipMediaController pipMediaController,
            SystemWindows systemWindows,
            DisplayController displayController,
            DisplayInsetsController displayInsetsController,
            PipDisplayLayoutState pipDisplayLayoutState,
            PipUiEventLogger pipUiEventLogger,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler) {
        return new PhonePipMenuController(context, pipBoundsState, pipMediaController,
                systemWindows, pipUiEventLogger, mainExecutor, mainHandler);
                systemWindows, displayController, displayInsetsController, pipDisplayLayoutState,
                pipUiEventLogger, mainExecutor, mainHandler);
    }

    @WMSingleton
+4 −1
Original line number Diff line number Diff line
@@ -183,12 +183,15 @@ public abstract class Pip2Module {
            PipUiEventLogger pipUiEventLogger,
            PipTaskListener pipTaskListener,
            @NonNull PipTransitionState pipTransitionState,
            @NonNull DisplayController displayController,
            @NonNull DisplayInsetsController displayInsetsController,
            @NonNull PipDisplayLayoutState pipDisplayLayoutState,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler) {
        return new PhonePipMenuController(context, pipBoundsState, pipMediaController,
                systemWindows, pipUiEventLogger, pipTaskListener, pipTransitionState,
                pipDisplayLayoutState, mainExecutor, mainHandler);
                displayController, displayInsetsController, pipDisplayLayoutState,
                mainExecutor, mainHandler);
    }


+23 −2
Original line number Diff line number Diff line
@@ -33,9 +33,13 @@ import android.view.ViewRootImpl;
import android.view.WindowManagerGlobal;

import com.android.internal.protolog.ProtoLog;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayInsetsController;
import com.android.wm.shell.common.ImeListener;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SystemWindows;
import com.android.wm.shell.common.pip.PipBoundsState;
import com.android.wm.shell.common.pip.PipDisplayLayoutState;
import com.android.wm.shell.common.pip.PipMediaController;
import com.android.wm.shell.common.pip.PipMediaController.ActionListener;
import com.android.wm.shell.common.pip.PipMenuController;
@@ -106,6 +110,7 @@ public class PhonePipMenuController implements PipMenuController {
    private final ArrayList<Listener> mListeners = new ArrayList<>();
    private final SystemWindows mSystemWindows;
    private final PipUiEventLogger mPipUiEventLogger;
    private final PipDisplayLayoutState mPipDisplayLayoutState;

    private List<RemoteAction> mAppActions;
    private RemoteAction mCloseAction;
@@ -117,6 +122,8 @@ public class PhonePipMenuController implements PipMenuController {

    private SurfaceControl mLeash;

    private boolean mIsImeVisible;

    private ActionListener mMediaActionListener = new ActionListener() {
        @Override
        public void onMediaActionsChanged(List<RemoteAction> mediaActions) {
@@ -127,15 +134,27 @@ public class PhonePipMenuController implements PipMenuController {

    public PhonePipMenuController(Context context, PipBoundsState pipBoundsState,
            PipMediaController mediaController, SystemWindows systemWindows,
            DisplayController displayController,
            DisplayInsetsController displayInsetsController,
            PipDisplayLayoutState pipDisplayLayoutState,
            PipUiEventLogger pipUiEventLogger,
            ShellExecutor mainExecutor, Handler mainHandler) {
        mContext = context;
        mPipBoundsState = pipBoundsState;
        mMediaController = mediaController;
        mSystemWindows = systemWindows;
        mPipDisplayLayoutState = pipDisplayLayoutState;
        mMainExecutor = mainExecutor;
        mMainHandler = mainHandler;
        mPipUiEventLogger = pipUiEventLogger;

        displayInsetsController.addInsetsChangedListener(mPipDisplayLayoutState.getDisplayId(),
                new ImeListener(displayController, mPipDisplayLayoutState.getDisplayId()) {
                    @Override
                    protected void onImeVisibilityChanged(boolean imeVisible, int imeHeight) {
                        mIsImeVisible = imeVisible;
                    }
                });
    }

    public boolean isMenuVisible() {
@@ -506,10 +525,12 @@ public class PhonePipMenuController implements PipMenuController {
                mMediaController.removeActionListener(mMediaActionListener);
            }

            // Do not grant focus if IME is visible, which can cause the focus being granted
            // back and forth in between the IME and PiP menu, and causes flicker.
            final boolean grantFocus = !mIsImeVisible && (menuState != MENU_STATE_NONE);
            try {
                WindowManagerGlobal.getWindowSession().grantEmbeddedWindowFocus(null /* window */,
                        mSystemWindows.getFocusGrantToken(mPipMenuView),
                        menuState != MENU_STATE_NONE /* grantFocus */);
                        mSystemWindows.getFocusGrantToken(mPipMenuView), grantFocus);
            } catch (RemoteException e) {
                ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
                        "%s: Unable to update focus as menu appears/disappears, %s", TAG, e);
+19 −2
Original line number Diff line number Diff line
@@ -35,6 +35,9 @@ import android.view.ViewRootImpl;
import android.view.WindowManagerGlobal;

import com.android.internal.protolog.ProtoLog;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayInsetsController;
import com.android.wm.shell.common.ImeListener;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SystemWindows;
import com.android.wm.shell.common.pip.PipBoundsState;
@@ -128,6 +131,8 @@ public class PhonePipMenuController implements PipMenuController,

    private SurfaceControl mLeash;

    private boolean mIsImeVisible;

    private ActionListener mMediaActionListener = new ActionListener() {
        @Override
        public void onMediaActionsChanged(List<RemoteAction> mediaActions) {
@@ -140,6 +145,8 @@ public class PhonePipMenuController implements PipMenuController,
            PipMediaController mediaController, SystemWindows systemWindows,
            PipUiEventLogger pipUiEventLogger, PipTaskListener pipTaskListener,
            @NonNull PipTransitionState pipTransitionState,
            @NonNull DisplayController displayController,
            @NonNull DisplayInsetsController displayInsetsController,
            @NonNull PipDisplayLayoutState pipDisplayLayoutState, ShellExecutor mainExecutor,
            Handler mainHandler) {
        mContext = context;
@@ -166,6 +173,13 @@ public class PhonePipMenuController implements PipMenuController,
                setAppActions(actions, closeAction);
            }
        });
        displayInsetsController.addInsetsChangedListener(mPipDisplayLayoutState.getDisplayId(),
                new ImeListener(displayController, mPipDisplayLayoutState.getDisplayId()) {
                    @Override
                    protected void onImeVisibilityChanged(boolean imeVisible, int imeHeight) {
                        mIsImeVisible = imeVisible;
                    }
                });
    }

    public boolean isMenuVisible() {
@@ -541,10 +555,13 @@ public class PhonePipMenuController implements PipMenuController,
                mMediaController.removeActionListener(mMediaActionListener);
            }

            // Do not grant focus if IME is visible, which can cause the focus being granted
            // back and forth in between the IME and PiP menu, and causes flicker.
            final boolean grantFocus = !mIsImeVisible && (menuState != MENU_STATE_NONE);
            if (mIsImeVisible) return;
            try {
                WindowManagerGlobal.getWindowSession().grantEmbeddedWindowFocus(null /* window */,
                        mSystemWindows.getFocusGrantToken(mPipMenuView),
                        menuState != MENU_STATE_NONE /* grantFocus */);
                        mSystemWindows.getFocusGrantToken(mPipMenuView), grantFocus);
            } catch (RemoteException e) {
                ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
                        "%s: Unable to update focus as menu appears/disappears, %s", TAG, e);