Merge "Hard code caption insets for caption in WM shell" into udc-dev am: cc12355d48
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21567644 Change-Id: I0335e530fb60d7dde1d7a48aaeddccfac90b8de4 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -20,7 +20,6 @@ import static android.view.InsetsSourceProto.FRAME;
|
|||||||
import static android.view.InsetsSourceProto.TYPE;
|
import static android.view.InsetsSourceProto.TYPE;
|
||||||
import static android.view.InsetsSourceProto.VISIBLE;
|
import static android.view.InsetsSourceProto.VISIBLE;
|
||||||
import static android.view.InsetsSourceProto.VISIBLE_FRAME;
|
import static android.view.InsetsSourceProto.VISIBLE_FRAME;
|
||||||
import static android.view.ViewRootImpl.CAPTION_ON_SHELL;
|
|
||||||
import static android.view.WindowInsets.Type.ime;
|
import static android.view.WindowInsets.Type.ime;
|
||||||
|
|
||||||
import android.annotation.IntRange;
|
import android.annotation.IntRange;
|
||||||
@@ -169,7 +168,7 @@ public class InsetsSource implements Parcelable {
|
|||||||
// During drag-move and drag-resizing, the caption insets position may not get updated
|
// During drag-move and drag-resizing, the caption insets position may not get updated
|
||||||
// before the app frame get updated. To layout the app content correctly during drag events,
|
// before the app frame get updated. To layout the app content correctly during drag events,
|
||||||
// we always return the insets with the corresponding height covering the top.
|
// we always return the insets with the corresponding height covering the top.
|
||||||
if (!CAPTION_ON_SHELL && getType() == WindowInsets.Type.captionBar()) {
|
if (getType() == WindowInsets.Type.captionBar()) {
|
||||||
return Insets.of(0, frame.height(), 0, 0);
|
return Insets.of(0, frame.height(), 0, 0);
|
||||||
}
|
}
|
||||||
// Checks for whether there is shared edge with insets for 0-width/height window.
|
// Checks for whether there is shared edge with insets for 0-width/height window.
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package android.view;
|
|||||||
import static android.view.WindowInsets.Type.FIRST;
|
import static android.view.WindowInsets.Type.FIRST;
|
||||||
import static android.view.WindowInsets.Type.LAST;
|
import static android.view.WindowInsets.Type.LAST;
|
||||||
import static android.view.WindowInsets.Type.SIZE;
|
import static android.view.WindowInsets.Type.SIZE;
|
||||||
|
import static android.view.WindowInsets.Type.captionBar;
|
||||||
import static android.view.WindowInsets.Type.ime;
|
import static android.view.WindowInsets.Type.ime;
|
||||||
import static android.view.WindowInsets.Type.navigationBars;
|
import static android.view.WindowInsets.Type.navigationBars;
|
||||||
|
|
||||||
@@ -51,11 +52,13 @@ public class InsetsSourceTest {
|
|||||||
|
|
||||||
private final InsetsSource mSource = new InsetsSource(0 /* id */, navigationBars());
|
private final InsetsSource mSource = new InsetsSource(0 /* id */, navigationBars());
|
||||||
private final InsetsSource mImeSource = new InsetsSource(1 /* id */, ime());
|
private final InsetsSource mImeSource = new InsetsSource(1 /* id */, ime());
|
||||||
|
private final InsetsSource mCaptionSource = new InsetsSource(2 /* id */, captionBar());
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
mSource.setVisible(true);
|
mSource.setVisible(true);
|
||||||
mImeSource.setVisible(true);
|
mImeSource.setVisible(true);
|
||||||
|
mCaptionSource.setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -106,6 +109,17 @@ public class InsetsSourceTest {
|
|||||||
assertEquals(Insets.of(0, 0, 0, 100), insets);
|
assertEquals(Insets.of(0, 0, 0, 100), insets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCalculateInsets_caption_resizing() {
|
||||||
|
mCaptionSource.setFrame(new Rect(0, 0, 100, 100));
|
||||||
|
Insets insets = mCaptionSource.calculateInsets(new Rect(0, 0, 200, 200), false);
|
||||||
|
assertEquals(Insets.of(0, 100, 0, 0), insets);
|
||||||
|
insets = mCaptionSource.calculateInsets(new Rect(0, 0, 50, 200), false);
|
||||||
|
assertEquals(Insets.of(0, 100, 0, 0), insets);
|
||||||
|
insets = mCaptionSource.calculateInsets(new Rect(100, 100, 200, 500), false);
|
||||||
|
assertEquals(Insets.of(0, 100, 0, 0), insets);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCalculateInsets_invisible() {
|
public void testCalculateInsets_invisible() {
|
||||||
mSource.setFrame(new Rect(0, 0, 500, 100));
|
mSource.setFrame(new Rect(0, 0, 500, 100));
|
||||||
|
|||||||
@@ -247,6 +247,18 @@ public class InsetsStateTest {
|
|||||||
assertEquals(Insets.of(0, 300, 0, 0), visibleInsets);
|
assertEquals(Insets.of(0, 300, 0, 0), visibleInsets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCalculateInsets_captionBarOffset() {
|
||||||
|
mState.getOrCreateSource(ID_CAPTION_BAR, captionBar())
|
||||||
|
.setFrame(new Rect(0, 0, 100, 300))
|
||||||
|
.setVisible(true);
|
||||||
|
|
||||||
|
Insets visibleInsets = mState.calculateVisibleInsets(
|
||||||
|
new Rect(0, 0, 150, 400), TYPE_APPLICATION, WINDOWING_MODE_UNDEFINED,
|
||||||
|
SOFT_INPUT_ADJUST_NOTHING, 0 /* windowFlags */);
|
||||||
|
assertEquals(Insets.of(0, 300, 0, 0), visibleInsets);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCalculateInsets_extraNavRightStatusTop() {
|
public void testCalculateInsets_extraNavRightStatusTop() {
|
||||||
mState.getOrCreateSource(ID_STATUS_BAR, statusBars())
|
mState.getOrCreateSource(ID_STATUS_BAR, statusBars())
|
||||||
|
|||||||
@@ -344,6 +344,19 @@ class InsetsPolicy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!attrs.isFullscreen() || attrs.getFitInsetsTypes() != 0) {
|
||||||
|
if (state == originalState) {
|
||||||
|
state = new InsetsState(originalState);
|
||||||
|
}
|
||||||
|
// Explicitly exclude floating windows from receiving caption insets. This is because we
|
||||||
|
// hard code caption insets for windows due to a synchronization issue that leads to
|
||||||
|
// flickering that bypasses insets frame calculation, which consequently needs us to
|
||||||
|
// remove caption insets from floating windows.
|
||||||
|
// TODO(b/254128050): Remove this workaround after we find a way to update window frames
|
||||||
|
// and caption insets frames simultaneously.
|
||||||
|
state.removeSource(InsetsState.ITYPE_CAPTION_BAR);
|
||||||
|
}
|
||||||
|
|
||||||
final SparseArray<WindowContainerInsetsSourceProvider> providers =
|
final SparseArray<WindowContainerInsetsSourceProvider> providers =
|
||||||
mStateController.getSourceProviders();
|
mStateController.getSourceProviders();
|
||||||
final int windowType = attrs.type;
|
final int windowType = attrs.type;
|
||||||
|
|||||||
Reference in New Issue
Block a user