Hide IME adjust dims when divider is hidden

When locking the screen, the divider is hidden, but the ime
dims aren't if the ime doesn't go away. This makes sure that
the ime adjust-dims are hidden whenever the divider is.

Bug: 156775140
Test: Open ime for top-split, lock, then turn-on screen. Observe
      no dims on half the screen.
Change-Id: I0851edd0071649ed0fbf12c8cd4fa3055383d864
This commit is contained in:
Evan Rosky
2020-05-19 13:36:28 -07:00
parent b82aaa58a5
commit c3a50909e3
3 changed files with 19 additions and 2 deletions

View File

@@ -277,7 +277,8 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
mView = (DividerView)
LayoutInflater.from(dctx).inflate(R.layout.docked_stack_divider, null);
DisplayLayout displayLayout = mDisplayController.getDisplayLayout(mContext.getDisplayId());
mView.injectDependencies(mWindowManager, mDividerState, this, mSplits, mSplitLayout);
mView.injectDependencies(mWindowManager, mDividerState, this, mSplits, mSplitLayout,
mImePositionProcessor);
mView.setVisibility(mVisible ? View.VISIBLE : View.INVISIBLE);
mView.setMinimizedDockStack(mMinimized, mHomeStackResizable);
final int size = dctx.getResources().getDimensionPixelSize(

View File

@@ -266,6 +266,18 @@ class DividerImeController implements DisplayImeController.ImePositionProcessor
mLastSecondaryDim * invProg + progress * mTargetSecondaryDim);
}
void setDimsHidden(SurfaceControl.Transaction t, boolean hidden) {
final DividerView view = getView();
if (hidden) {
view.setResizeDimLayer(t, true /* primary */, 0.f /* alpha */);
view.setResizeDimLayer(t, false /* primary */, 0.f /* alpha */);
} else {
updateDimTargets();
view.setResizeDimLayer(t, true /* primary */, mTargetPrimaryDim);
view.setResizeDimLayer(t, false /* primary */, mTargetSecondaryDim);
}
}
private void onEnd(boolean cancelled, SurfaceControl.Transaction t) {
if (!cancelled) {
onProgress(1.f, t);

View File

@@ -143,6 +143,7 @@ public class DividerView extends FrameLayout implements OnTouchListener,
private VelocityTracker mVelocityTracker;
private FlingAnimationUtils mFlingAnimationUtils;
private SplitDisplayLayout mSplitLayout;
private DividerImeController mImeController;
private DividerCallbacks mCallback;
private final AnimationHandler mAnimationHandler = new AnimationHandler();
@@ -358,12 +359,14 @@ public class DividerView extends FrameLayout implements OnTouchListener,
}
public void injectDependencies(DividerWindowManager windowManager, DividerState dividerState,
DividerCallbacks callback, SplitScreenTaskOrganizer tiles, SplitDisplayLayout sdl) {
DividerCallbacks callback, SplitScreenTaskOrganizer tiles, SplitDisplayLayout sdl,
DividerImeController imeController) {
mWindowManager = windowManager;
mState = dividerState;
mCallback = callback;
mTiles = tiles;
mSplitLayout = sdl;
mImeController = imeController;
if (mState.mRatioPositionBeforeMinimized == 0) {
// Set the middle target as the initial state
@@ -403,6 +406,7 @@ public class DividerView extends FrameLayout implements OnTouchListener,
} else {
t.show(sc);
}
mImeController.setDimsHidden(t, hidden);
t.apply();
mTiles.releaseTransaction(t);
});