Keep frames when providing insets to freeform windows

A previous CL [1] removed all frames and insets except for caption and
ime provided to freeform windows. However, some frames should be kept.

For example, according to WindowInsets#getPrivacyIndicatorBounds, this
value should not be null when there's a privacy indicator.

This change adds back frames for freeform windows.

[1] Ife41a37082a65db50c7bb5b75690db5bc3cb0bd2

Bug: 226707036
Test: android.server.wm.PrivacyIndicatorBoundsTests
Change-Id: I9a7aafdfbbb9490ba646dc113b135515781cdb82
This commit is contained in:
Hiroki Sato
2022-09-15 12:38:38 +09:00
parent 82bd3a2026
commit bc27dc3921

View File

@@ -64,6 +64,7 @@ import android.view.InsetsState.InternalInsetsType;
import android.view.InternalInsetsAnimationController;
import android.view.SurfaceControl;
import android.view.SyncRtSurfaceTransactionApplier;
import android.view.WindowInsets;
import android.view.WindowInsets.Type;
import android.view.WindowInsetsAnimation;
import android.view.WindowInsetsAnimation.Bounds;
@@ -398,16 +399,13 @@ class InsetsPolicy {
if (WindowConfiguration.isFloating(windowingMode)
|| (windowingMode == WINDOWING_MODE_MULTI_WINDOW && isAlwaysOnTop)) {
// Keep frames, caption, and IME.
int types = WindowInsets.Type.captionBar();
if (windowingMode != WINDOWING_MODE_PINNED) {
types |= WindowInsets.Type.ime();
}
InsetsState newState = new InsetsState();
// Only caption and IME are needed.
if (state.peekSource(ITYPE_CAPTION_BAR) != null) {
newState.addSource(state.peekSource(ITYPE_CAPTION_BAR));
}
if (windowingMode != WINDOWING_MODE_PINNED && state.peekSource(ITYPE_IME) != null) {
newState.addSource(state.peekSource(ITYPE_IME));
}
newState.set(state, types);
state = newState;
stateCopied = true;
}