Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDisplayLayoutState.java +13 −1 Original line number Diff line number Diff line Loading @@ -26,11 +26,14 @@ import android.graphics.Insets; import android.graphics.Point; import android.graphics.Rect; import android.util.Size; import android.view.Display; import android.view.Surface; import android.view.WindowManager; import androidx.annotation.NonNull; import com.android.wm.shell.R; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.dagger.WMSingleton; Loading @@ -48,13 +51,15 @@ public class PipDisplayLayoutState { private Context mContext; private int mDisplayId; @NonNull private DisplayLayout mDisplayLayout; @NonNull private final DisplayController mDisplayController; private Point mScreenEdgeInsets = null; private Insets mNavigationBarsInsets = Insets.NONE; @Inject public PipDisplayLayoutState(Context context) { public PipDisplayLayoutState(Context context, @NonNull DisplayController displayController) { mContext = context; mDisplayLayout = new DisplayLayout(); mDisplayController = displayController; reloadResources(); } Loading Loading @@ -138,6 +143,13 @@ public class PipDisplayLayoutState { mDisplayId = displayId; } /** Returns the context associated with the current display. */ public Context getCurrentUiContext() { Display display = mDisplayController.getDisplay(mDisplayId); return mContext.createWindowContext(display, WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, /* options= */null); } /** Set the navigationBars side and widthOrHeight. */ public void setNavigationBarsInsets(Insets insets) { mNavigationBarsInsets = insets; Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PhonePipMenuController.java +3 −2 Original line number Diff line number Diff line Loading @@ -196,7 +196,8 @@ public class PhonePipMenuController implements PipMenuController, if (mPipMenuView != null) { detachPipMenuView(); } mPipMenuView = new PipMenuView(mContext, this, mMainExecutor, mMainHandler, final Context uiContext = mPipDisplayLayoutState.getCurrentUiContext(); mPipMenuView = new PipMenuView(uiContext, this, mMainExecutor, mMainHandler, mPipUiEventLogger); mPipMenuView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override Loading Loading @@ -229,7 +230,7 @@ public class PhonePipMenuController implements PipMenuController, }); mSystemWindows.addView(mPipMenuView, getPipMenuLayoutParams(mContext, MENU_WINDOW_TITLE, 0 /* width */, 0 /* height */), getPipMenuLayoutParams(uiContext, MENU_WINDOW_TITLE, 0 /* width */, 0 /* height */), mPipDisplayLayoutState.getDisplayId(), SHELL_ROOT_LAYER_PIP); setShellRootAccessibilityWindow(); Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipDismissTargetHandler.java +6 −5 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.content.res.Resources; import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.Rect; import android.view.Display; import android.view.MotionEvent; import android.view.SurfaceControl; import android.view.View; Loading Loading @@ -87,7 +86,7 @@ public class PipDismissTargetHandler implements ViewTreeObserver.OnPreDrawListen private SurfaceControl mTaskLeash; private boolean mHasDismissTargetSurface; private final Context mContext; private Context mContext; private final PipMotionHelper mMotionHelper; private final PipUiEventLogger mPipUiEventLogger; private WindowManager mWindowManager; Loading Loading @@ -331,8 +330,10 @@ public class PipDismissTargetHandler implements ViewTreeObserver.OnPreDrawListen return; } mWindowManagerDisplayId = pipDisplayId; Display display = mDisplayController.getDisplay(mWindowManagerDisplayId); Context uiContext = mContext.createWindowContext(display, WINDOW_TYPE, null); mWindowManager = uiContext.getSystemService(WindowManager.class); mContext = mPipDisplayLayoutState.getCurrentUiContext(); mWindowManager = mContext.getSystemService(WindowManager.class); // TODO(b/414864788): Utilize display-id change callback for updating UI // If the displayId has changed, reset the UI for the current display init(); } } libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PhoneSizeSpecSourceTest.java +3 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.view.DisplayInfo; import com.android.wm.shell.R; import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import org.junit.Assert; Loading Loading @@ -73,6 +74,7 @@ public class PhoneSizeSpecSourceTest extends ShellTestCase { private static Map<Float, Size> sSquareDisplayExpectedMinSizes; @Mock private Context mContext; @Mock private DisplayController mDisplayController; @Mock private Resources mResources; private PipDisplayLayoutState mPipDisplayLayoutState; Loading Loading @@ -179,7 +181,7 @@ public class PhoneSizeSpecSourceTest extends ShellTestCase { // this is done to avoid unnecessary mocking while allowing for custom display dimensions DisplayLayout displayLayout = new DisplayLayout(displayInfo, getContext().getResources(), false, false); mPipDisplayLayoutState = new PipDisplayLayoutState(mContext); mPipDisplayLayoutState = new PipDisplayLayoutState(mContext, mDisplayController); mPipDisplayLayoutState.setDisplayLayout(displayLayout); mSizeSpecSource = new PhoneSizeSpecSource(mContext, mPipDisplayLayoutState); Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PipBoundsAlgorithmTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -31,11 +31,13 @@ import androidx.test.filters.SmallTest; import com.android.wm.shell.R; import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; /** * Unit tests against {@link PipBoundsAlgorithm}, including but not limited to: Loading @@ -62,12 +64,13 @@ public class PipBoundsAlgorithmTest extends ShellTestCase { private PipBoundsState mPipBoundsState; private SizeSpecSource mSizeSpecSource; private PipDisplayLayoutState mPipDisplayLayoutState; @Mock private DisplayController mDisplayController; @Before public void setUp() throws Exception { initializeMockResources(); mPipDisplayLayoutState = new PipDisplayLayoutState(mContext); mPipDisplayLayoutState = new PipDisplayLayoutState(mContext, mDisplayController); mSizeSpecSource = new PhoneSizeSpecSource(mContext, mPipDisplayLayoutState); mPipBoundsState = new PipBoundsState(mContext, mSizeSpecSource, mPipDisplayLayoutState); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDisplayLayoutState.java +13 −1 Original line number Diff line number Diff line Loading @@ -26,11 +26,14 @@ import android.graphics.Insets; import android.graphics.Point; import android.graphics.Rect; import android.util.Size; import android.view.Display; import android.view.Surface; import android.view.WindowManager; import androidx.annotation.NonNull; import com.android.wm.shell.R; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.dagger.WMSingleton; Loading @@ -48,13 +51,15 @@ public class PipDisplayLayoutState { private Context mContext; private int mDisplayId; @NonNull private DisplayLayout mDisplayLayout; @NonNull private final DisplayController mDisplayController; private Point mScreenEdgeInsets = null; private Insets mNavigationBarsInsets = Insets.NONE; @Inject public PipDisplayLayoutState(Context context) { public PipDisplayLayoutState(Context context, @NonNull DisplayController displayController) { mContext = context; mDisplayLayout = new DisplayLayout(); mDisplayController = displayController; reloadResources(); } Loading Loading @@ -138,6 +143,13 @@ public class PipDisplayLayoutState { mDisplayId = displayId; } /** Returns the context associated with the current display. */ public Context getCurrentUiContext() { Display display = mDisplayController.getDisplay(mDisplayId); return mContext.createWindowContext(display, WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, /* options= */null); } /** Set the navigationBars side and widthOrHeight. */ public void setNavigationBarsInsets(Insets insets) { mNavigationBarsInsets = insets; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PhonePipMenuController.java +3 −2 Original line number Diff line number Diff line Loading @@ -196,7 +196,8 @@ public class PhonePipMenuController implements PipMenuController, if (mPipMenuView != null) { detachPipMenuView(); } mPipMenuView = new PipMenuView(mContext, this, mMainExecutor, mMainHandler, final Context uiContext = mPipDisplayLayoutState.getCurrentUiContext(); mPipMenuView = new PipMenuView(uiContext, this, mMainExecutor, mMainHandler, mPipUiEventLogger); mPipMenuView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override Loading Loading @@ -229,7 +230,7 @@ public class PhonePipMenuController implements PipMenuController, }); mSystemWindows.addView(mPipMenuView, getPipMenuLayoutParams(mContext, MENU_WINDOW_TITLE, 0 /* width */, 0 /* height */), getPipMenuLayoutParams(uiContext, MENU_WINDOW_TITLE, 0 /* width */, 0 /* height */), mPipDisplayLayoutState.getDisplayId(), SHELL_ROOT_LAYER_PIP); setShellRootAccessibilityWindow(); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipDismissTargetHandler.java +6 −5 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.content.res.Resources; import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.Rect; import android.view.Display; import android.view.MotionEvent; import android.view.SurfaceControl; import android.view.View; Loading Loading @@ -87,7 +86,7 @@ public class PipDismissTargetHandler implements ViewTreeObserver.OnPreDrawListen private SurfaceControl mTaskLeash; private boolean mHasDismissTargetSurface; private final Context mContext; private Context mContext; private final PipMotionHelper mMotionHelper; private final PipUiEventLogger mPipUiEventLogger; private WindowManager mWindowManager; Loading Loading @@ -331,8 +330,10 @@ public class PipDismissTargetHandler implements ViewTreeObserver.OnPreDrawListen return; } mWindowManagerDisplayId = pipDisplayId; Display display = mDisplayController.getDisplay(mWindowManagerDisplayId); Context uiContext = mContext.createWindowContext(display, WINDOW_TYPE, null); mWindowManager = uiContext.getSystemService(WindowManager.class); mContext = mPipDisplayLayoutState.getCurrentUiContext(); mWindowManager = mContext.getSystemService(WindowManager.class); // TODO(b/414864788): Utilize display-id change callback for updating UI // If the displayId has changed, reset the UI for the current display init(); } }
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PhoneSizeSpecSourceTest.java +3 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.view.DisplayInfo; import com.android.wm.shell.R; import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import org.junit.Assert; Loading Loading @@ -73,6 +74,7 @@ public class PhoneSizeSpecSourceTest extends ShellTestCase { private static Map<Float, Size> sSquareDisplayExpectedMinSizes; @Mock private Context mContext; @Mock private DisplayController mDisplayController; @Mock private Resources mResources; private PipDisplayLayoutState mPipDisplayLayoutState; Loading Loading @@ -179,7 +181,7 @@ public class PhoneSizeSpecSourceTest extends ShellTestCase { // this is done to avoid unnecessary mocking while allowing for custom display dimensions DisplayLayout displayLayout = new DisplayLayout(displayInfo, getContext().getResources(), false, false); mPipDisplayLayoutState = new PipDisplayLayoutState(mContext); mPipDisplayLayoutState = new PipDisplayLayoutState(mContext, mDisplayController); mPipDisplayLayoutState.setDisplayLayout(displayLayout); mSizeSpecSource = new PhoneSizeSpecSource(mContext, mPipDisplayLayoutState); Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PipBoundsAlgorithmTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -31,11 +31,13 @@ import androidx.test.filters.SmallTest; import com.android.wm.shell.R; import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; /** * Unit tests against {@link PipBoundsAlgorithm}, including but not limited to: Loading @@ -62,12 +64,13 @@ public class PipBoundsAlgorithmTest extends ShellTestCase { private PipBoundsState mPipBoundsState; private SizeSpecSource mSizeSpecSource; private PipDisplayLayoutState mPipDisplayLayoutState; @Mock private DisplayController mDisplayController; @Before public void setUp() throws Exception { initializeMockResources(); mPipDisplayLayoutState = new PipDisplayLayoutState(mContext); mPipDisplayLayoutState = new PipDisplayLayoutState(mContext, mDisplayController); mSizeSpecSource = new PhoneSizeSpecSource(mContext, mPipDisplayLayoutState); mPipBoundsState = new PipBoundsState(mContext, mSizeSpecSource, mPipDisplayLayoutState); Loading