Loading services/core/java/com/android/server/wm/DockedStackDividerController.java +9 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ public class DockedStackDividerController implements DimLayerUser { private final Interpolator mMinimizedDockInterpolator; private float mMaximizeMeetFraction; private final Rect mTouchRegion = new Rect(); private boolean mAdjustingForIme; DockedStackDividerController(WindowManagerService service, DisplayContent displayContent) { mService = service; Loading Loading @@ -173,6 +174,14 @@ public class DockedStackDividerController implements DimLayerUser { return mLastVisibility; } void setAdjustingForIme(boolean adjusting) { mAdjustingForIme = adjusting; } boolean isAdjustingForIme() { return mAdjustingForIme; } void positionDockedStackedDivider(Rect frame) { TaskStack stack = mDisplayContent.getDockedStackLocked(); if (stack == null) { Loading services/core/java/com/android/server/wm/TaskStack.java +12 −6 Original line number Diff line number Diff line Loading @@ -200,10 +200,11 @@ public class TaskStack implements DimLayer.DimLayerUser, * @param bounds The adjusted bounds. * @param keepInsets Whether to keep the insets from the original bounds or to calculate new * ones depending on the adjusted bounds. * @return true if the adjusted bounds has changed. */ private void setAdjustedBounds(Rect bounds, boolean keepInsets) { private boolean setAdjustedBounds(Rect bounds, boolean keepInsets) { if (mAdjustedBounds.equals(bounds)) { return; return false; } mAdjustedBounds.set(bounds); Loading @@ -211,6 +212,7 @@ public class TaskStack implements DimLayer.DimLayerUser, alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds, adjusted && keepInsets ? mBounds : null); mDisplayContent.layoutNeeded = true; return true; } private void alignTasksToAdjustedBounds(Rect adjustedBounds, Rect tempInsetBounds) { Loading Loading @@ -794,7 +796,9 @@ public class TaskStack implements DimLayer.DimLayerUser, void setAdjustedForIme(WindowState imeWin) { mAdjustedForIme = true; mImeWin = imeWin; updateAdjustedBounds(); if (updateAdjustedBounds()) { getDisplayContent().mDividerControllerLocked.setAdjustingForIme(true); } } /** Loading @@ -803,7 +807,9 @@ public class TaskStack implements DimLayer.DimLayerUser, void resetAdjustedForIme() { mAdjustedForIme = false; mImeWin = null; updateAdjustedBounds(); if (updateAdjustedBounds()) { getDisplayContent().mDividerControllerLocked.setAdjustingForIme(true); } } /** Loading Loading @@ -920,7 +926,7 @@ public class TaskStack implements DimLayer.DimLayerUser, /** * Updates the adjustment depending on it's current state. */ void updateAdjustedBounds() { boolean updateAdjustedBounds() { boolean adjust = false; if (mMinimizeAmount != 0f) { adjust = adjustForMinimizedDockedStack(mMinimizeAmount); Loading @@ -931,7 +937,7 @@ public class TaskStack implements DimLayer.DimLayerUser, mTmpAdjustedBounds.setEmpty(); mLastContentBounds.setEmpty(); } setAdjustedBounds(mTmpAdjustedBounds, isAdjustedForMinimizedDockedStack()); return setAdjustedBounds(mTmpAdjustedBounds, isAdjustedForMinimizedDockedStack()); } boolean isAdjustedForMinimizedDockedStack() { Loading services/core/java/com/android/server/wm/WindowManagerService.java +25 −23 Original line number Diff line number Diff line Loading @@ -7352,6 +7352,30 @@ public class WindowManagerService extends IWindowManager.Stub } } private void adjustForImeIfNeeded(final DisplayContent displayContent) { final WindowState imeWin = mInputMethodWindow; final TaskStack focusedStack = mCurrentFocus != null ? mCurrentFocus.getStack() : null; if (imeWin != null && imeWin.isVisibleLw() && imeWin.isDisplayedLw() && isStackVisibleLocked(DOCKED_STACK_ID) && focusedStack != null && focusedStack.getDockSide() == DOCKED_BOTTOM){ final ArrayList<TaskStack> stacks = displayContent.getStacks(); for (int i = stacks.size() - 1; i >= 0; --i) { final TaskStack stack = stacks.get(i); if (stack.isVisibleLocked()) { stack.setAdjustedForIme(imeWin); } } } else { final ArrayList<TaskStack> stacks = displayContent.getStacks(); for (int i = stacks.size() - 1; i >= 0; --i) { final TaskStack stack = stacks.get(i); stack.resetAdjustedForIme(); } } } // ------------------------------------------------------------- // Drag and drop // ------------------------------------------------------------- Loading Loading @@ -8209,30 +8233,8 @@ public class WindowManagerService extends IWindowManager.Stub case UPDATE_DOCKED_STACK_DIVIDER: { synchronized (mWindowMap) { final DisplayContent displayContent = getDefaultDisplayContentLocked(); displayContent.getDockedDividerController().reevaluateVisibility(false); final WindowState imeWin = mInputMethodWindow; final TaskStack focusedStack = mCurrentFocus != null ? mCurrentFocus.getStack() : null; if (imeWin != null && imeWin.isVisibleNow() && isStackVisibleLocked(DOCKED_STACK_ID) && focusedStack != null && focusedStack.getDockSide() == DOCKED_BOTTOM){ final ArrayList<TaskStack> stacks = displayContent.getStacks(); for (int i = stacks.size() - 1; i >= 0; --i) { final TaskStack stack = stacks.get(i); if (stack.isVisibleLocked()) { stack.setAdjustedForIme(imeWin); } } } else { final ArrayList<TaskStack> stacks = displayContent.getStacks(); for (int i = stacks.size() - 1; i >= 0; --i) { final TaskStack stack = stacks.get(i); stack.resetAdjustedForIme(); } } adjustForImeIfNeeded(displayContent); } } break; Loading services/core/java/com/android/server/wm/WindowSurfacePlacer.java +6 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; import static android.view.WindowManager.LayoutParams.TYPE_DREAM; import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG; import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; Loading Loading @@ -689,6 +690,9 @@ class WindowSurfacePlacer { && !w.isDragResizing() && !adjustedForMinimizedDockedStack && (task == null || !w.getTask().mStack.getFreezeMovementAnimations())) { winAnimator.setMoveAnimation(left, top); } else if (w.mAttrs.type == TYPE_DOCK_DIVIDER && displayContent.getDockedDividerController().isAdjustingForIme()) { winAnimator.setMoveAnimation(left, top); } //TODO (multidisplay): Accessibility supported only for the default display. Loading Loading @@ -805,6 +809,8 @@ class WindowSurfacePlacer { mService.updateResizingWindows(w); } displayContent.getDockedDividerController().setAdjustingForIme(false); mService.mDisplayManagerInternal.setDisplayProperties(displayId, mDisplayHasContent, mPreferredRefreshRate, Loading Loading
services/core/java/com/android/server/wm/DockedStackDividerController.java +9 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ public class DockedStackDividerController implements DimLayerUser { private final Interpolator mMinimizedDockInterpolator; private float mMaximizeMeetFraction; private final Rect mTouchRegion = new Rect(); private boolean mAdjustingForIme; DockedStackDividerController(WindowManagerService service, DisplayContent displayContent) { mService = service; Loading Loading @@ -173,6 +174,14 @@ public class DockedStackDividerController implements DimLayerUser { return mLastVisibility; } void setAdjustingForIme(boolean adjusting) { mAdjustingForIme = adjusting; } boolean isAdjustingForIme() { return mAdjustingForIme; } void positionDockedStackedDivider(Rect frame) { TaskStack stack = mDisplayContent.getDockedStackLocked(); if (stack == null) { Loading
services/core/java/com/android/server/wm/TaskStack.java +12 −6 Original line number Diff line number Diff line Loading @@ -200,10 +200,11 @@ public class TaskStack implements DimLayer.DimLayerUser, * @param bounds The adjusted bounds. * @param keepInsets Whether to keep the insets from the original bounds or to calculate new * ones depending on the adjusted bounds. * @return true if the adjusted bounds has changed. */ private void setAdjustedBounds(Rect bounds, boolean keepInsets) { private boolean setAdjustedBounds(Rect bounds, boolean keepInsets) { if (mAdjustedBounds.equals(bounds)) { return; return false; } mAdjustedBounds.set(bounds); Loading @@ -211,6 +212,7 @@ public class TaskStack implements DimLayer.DimLayerUser, alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds, adjusted && keepInsets ? mBounds : null); mDisplayContent.layoutNeeded = true; return true; } private void alignTasksToAdjustedBounds(Rect adjustedBounds, Rect tempInsetBounds) { Loading Loading @@ -794,7 +796,9 @@ public class TaskStack implements DimLayer.DimLayerUser, void setAdjustedForIme(WindowState imeWin) { mAdjustedForIme = true; mImeWin = imeWin; updateAdjustedBounds(); if (updateAdjustedBounds()) { getDisplayContent().mDividerControllerLocked.setAdjustingForIme(true); } } /** Loading @@ -803,7 +807,9 @@ public class TaskStack implements DimLayer.DimLayerUser, void resetAdjustedForIme() { mAdjustedForIme = false; mImeWin = null; updateAdjustedBounds(); if (updateAdjustedBounds()) { getDisplayContent().mDividerControllerLocked.setAdjustingForIme(true); } } /** Loading Loading @@ -920,7 +926,7 @@ public class TaskStack implements DimLayer.DimLayerUser, /** * Updates the adjustment depending on it's current state. */ void updateAdjustedBounds() { boolean updateAdjustedBounds() { boolean adjust = false; if (mMinimizeAmount != 0f) { adjust = adjustForMinimizedDockedStack(mMinimizeAmount); Loading @@ -931,7 +937,7 @@ public class TaskStack implements DimLayer.DimLayerUser, mTmpAdjustedBounds.setEmpty(); mLastContentBounds.setEmpty(); } setAdjustedBounds(mTmpAdjustedBounds, isAdjustedForMinimizedDockedStack()); return setAdjustedBounds(mTmpAdjustedBounds, isAdjustedForMinimizedDockedStack()); } boolean isAdjustedForMinimizedDockedStack() { Loading
services/core/java/com/android/server/wm/WindowManagerService.java +25 −23 Original line number Diff line number Diff line Loading @@ -7352,6 +7352,30 @@ public class WindowManagerService extends IWindowManager.Stub } } private void adjustForImeIfNeeded(final DisplayContent displayContent) { final WindowState imeWin = mInputMethodWindow; final TaskStack focusedStack = mCurrentFocus != null ? mCurrentFocus.getStack() : null; if (imeWin != null && imeWin.isVisibleLw() && imeWin.isDisplayedLw() && isStackVisibleLocked(DOCKED_STACK_ID) && focusedStack != null && focusedStack.getDockSide() == DOCKED_BOTTOM){ final ArrayList<TaskStack> stacks = displayContent.getStacks(); for (int i = stacks.size() - 1; i >= 0; --i) { final TaskStack stack = stacks.get(i); if (stack.isVisibleLocked()) { stack.setAdjustedForIme(imeWin); } } } else { final ArrayList<TaskStack> stacks = displayContent.getStacks(); for (int i = stacks.size() - 1; i >= 0; --i) { final TaskStack stack = stacks.get(i); stack.resetAdjustedForIme(); } } } // ------------------------------------------------------------- // Drag and drop // ------------------------------------------------------------- Loading Loading @@ -8209,30 +8233,8 @@ public class WindowManagerService extends IWindowManager.Stub case UPDATE_DOCKED_STACK_DIVIDER: { synchronized (mWindowMap) { final DisplayContent displayContent = getDefaultDisplayContentLocked(); displayContent.getDockedDividerController().reevaluateVisibility(false); final WindowState imeWin = mInputMethodWindow; final TaskStack focusedStack = mCurrentFocus != null ? mCurrentFocus.getStack() : null; if (imeWin != null && imeWin.isVisibleNow() && isStackVisibleLocked(DOCKED_STACK_ID) && focusedStack != null && focusedStack.getDockSide() == DOCKED_BOTTOM){ final ArrayList<TaskStack> stacks = displayContent.getStacks(); for (int i = stacks.size() - 1; i >= 0; --i) { final TaskStack stack = stacks.get(i); if (stack.isVisibleLocked()) { stack.setAdjustedForIme(imeWin); } } } else { final ArrayList<TaskStack> stacks = displayContent.getStacks(); for (int i = stacks.size() - 1; i >= 0; --i) { final TaskStack stack = stacks.get(i); stack.resetAdjustedForIme(); } } adjustForImeIfNeeded(displayContent); } } break; Loading
services/core/java/com/android/server/wm/WindowSurfacePlacer.java +6 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; import static android.view.WindowManager.LayoutParams.TYPE_DREAM; import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG; import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; Loading Loading @@ -689,6 +690,9 @@ class WindowSurfacePlacer { && !w.isDragResizing() && !adjustedForMinimizedDockedStack && (task == null || !w.getTask().mStack.getFreezeMovementAnimations())) { winAnimator.setMoveAnimation(left, top); } else if (w.mAttrs.type == TYPE_DOCK_DIVIDER && displayContent.getDockedDividerController().isAdjustingForIme()) { winAnimator.setMoveAnimation(left, top); } //TODO (multidisplay): Accessibility supported only for the default display. Loading Loading @@ -805,6 +809,8 @@ class WindowSurfacePlacer { mService.updateResizingWindows(w); } displayContent.getDockedDividerController().setAdjustingForIme(false); mService.mDisplayManagerInternal.setDisplayProperties(displayId, mDisplayHasContent, mPreferredRefreshRate, Loading