From 13e9fc1916234a4d7cfd769a1d7e85df2d3c1b95 Mon Sep 17 00:00:00 2001 From: Tony Huang Date: Thu, 23 Sep 2021 15:30:07 +0800 Subject: [PATCH] Fix split dim when IME shown ImePositionProcessor didn't handle dim if it didn't not offset layout, but when landscape, the layout will not offset. It cause dim value didn't apply. Fix this by checking both offset and dim value. Fix: 200757897 Test: manual Test: pass existing tests Change-Id: I709b69c8e2d102d0e8237998b26f45c70805bf23 --- .../wm/shell/common/split/SplitLayout.java | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java index 27c8d7ac00325..1c308a3daf34a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java @@ -776,26 +776,31 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange boolean adjustSurfaceLayoutForIme(SurfaceControl.Transaction t, SurfaceControl dividerLeash, SurfaceControl leash1, SurfaceControl leash2, SurfaceControl dimLayer1, SurfaceControl dimLayer2) { - if (mYOffsetForIme == 0) return false; + final boolean showDim = mDimValue1 > 0.001f || mDimValue2 > 0.001f; + boolean adjusted = false; + if (mYOffsetForIme != 0) { + if (dividerLeash != null) { + mTempRect.set(mDividerBounds); + mTempRect.offset(0, mYOffsetForIme); + t.setPosition(dividerLeash, mTempRect.left, mTempRect.top); + } - if (dividerLeash != null) { - mTempRect.set(mDividerBounds); + mTempRect.set(mBounds1); mTempRect.offset(0, mYOffsetForIme); - t.setPosition(dividerLeash, mTempRect.left, mTempRect.top); + t.setPosition(leash1, mTempRect.left, mTempRect.top); + + mTempRect.set(mBounds2); + mTempRect.offset(0, mYOffsetForIme); + t.setPosition(leash2, mTempRect.left, mTempRect.top); + adjusted = true; } - mTempRect.set(mBounds1); - mTempRect.offset(0, mYOffsetForIme); - t.setPosition(leash1, mTempRect.left, mTempRect.top); - - mTempRect.set(mBounds2); - mTempRect.offset(0, mYOffsetForIme); - t.setPosition(leash2, mTempRect.left, mTempRect.top); - - t.setAlpha(dimLayer1, mDimValue1).setVisibility(dimLayer1, mDimValue1 > 0.001f); - t.setAlpha(dimLayer2, mDimValue2).setVisibility(dimLayer2, mDimValue2 > 0.001f); - - return true; + if (showDim) { + t.setAlpha(dimLayer1, mDimValue1).setVisibility(dimLayer1, mDimValue1 > 0.001f); + t.setAlpha(dimLayer2, mDimValue2).setVisibility(dimLayer2, mDimValue2 > 0.001f); + adjusted = true; + } + return adjusted; } } }