Merge "Revert "Always get window insets from server""
This commit is contained in:
committed by
Android (Google) Code Review
commit
711539126f
@@ -16,9 +16,6 @@
|
||||
|
||||
package android.view;
|
||||
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.app.ResourcesManager;
|
||||
import android.compat.annotation.UnsupportedAppUsage;
|
||||
@@ -70,6 +67,10 @@ public final class WindowManagerImpl implements WindowManager {
|
||||
|
||||
private IBinder mDefaultToken;
|
||||
|
||||
private boolean mIsViewAdded;
|
||||
private View mLastView;
|
||||
private WindowManager.LayoutParams mLastParams;
|
||||
|
||||
public WindowManagerImpl(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
@@ -101,6 +102,9 @@ public final class WindowManagerImpl implements WindowManager {
|
||||
public void addView(@NonNull View view, @NonNull ViewGroup.LayoutParams params) {
|
||||
applyDefaultToken(params);
|
||||
mGlobal.addView(view, params, mContext.getDisplay(), mParentWindow);
|
||||
mIsViewAdded = true;
|
||||
mLastView = view;
|
||||
mLastParams = (WindowManager.LayoutParams) params;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -246,15 +250,18 @@ public final class WindowManagerImpl implements WindowManager {
|
||||
// TODO(window-context): This can only be properly implemented
|
||||
// once we flip the new insets mode flag.
|
||||
if (mParentWindow != null) {
|
||||
if (mParentWindow.getDecorView().isAttachedToWindow()) {
|
||||
return mParentWindow.getDecorView().getViewRootImpl()
|
||||
.getWindowInsets(true /* forceConstruct */);
|
||||
}
|
||||
return getWindowInsetsFromServer(mParentWindow.getAttributes());
|
||||
}
|
||||
return getWindowInsetsFromServer(getDefaultParams());
|
||||
}
|
||||
if (mIsViewAdded) {
|
||||
return mLastView.getViewRootImpl().getWindowInsets(true /* forceConstruct */);
|
||||
} else {
|
||||
return getWindowInsetsFromServer(new WindowManager.LayoutParams());
|
||||
}
|
||||
|
||||
private static WindowManager.LayoutParams getDefaultParams() {
|
||||
final WindowManager.LayoutParams params = new WindowManager.LayoutParams();
|
||||
params.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR;
|
||||
return params;
|
||||
}
|
||||
|
||||
private WindowInsets getWindowInsetsFromServer(WindowManager.LayoutParams attrs) {
|
||||
|
||||
@@ -138,9 +138,6 @@
|
||||
<!-- vr test permissions -->
|
||||
<uses-permission android:name="android.permission.RESTRICTED_VR_ACCESS" />
|
||||
|
||||
<!-- WindowMetricsTest permissions -->
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
|
||||
<application android:theme="@style/Theme" android:supportsRtl="true">
|
||||
<uses-library android:name="android.test.runner" />
|
||||
<uses-library android:name="org.apache.http.legacy" android:required="false" />
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.view;
|
||||
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
|
||||
|
||||
import android.content.Context;
|
||||
import android.hardware.display.DisplayManager;
|
||||
import android.os.Handler;
|
||||
import android.platform.test.annotations.Presubmit;
|
||||
|
||||
import androidx.test.filters.FlakyTest;
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
/**
|
||||
* Tests for {@link WindowManager#getCurrentWindowMetrics()} and
|
||||
* {@link WindowManager#getMaximumWindowMetrics()}.
|
||||
*
|
||||
* <p>Build/Install/Run:
|
||||
* atest FrameworksCoreTests:WindowMetricsTest
|
||||
*
|
||||
* <p>This test class is a part of Window Manager Service tests and specified in
|
||||
* {@link com.android.server.wm.test.filters.FrameworksTestsFilter}.
|
||||
*/
|
||||
@FlakyTest(bugId = 148789183, detail = "Remove after confirmed it's stable.")
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@SmallTest
|
||||
@Presubmit
|
||||
public class WindowMetricsTest {
|
||||
private Context mWindowContext;
|
||||
private WindowManager mWm;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
final Context insetContext = InstrumentationRegistry.getInstrumentation()
|
||||
.getTargetContext();
|
||||
final Display display = insetContext.getSystemService(DisplayManager.class)
|
||||
.getDisplay(DEFAULT_DISPLAY);
|
||||
mWindowContext = insetContext.createDisplayContext(display)
|
||||
.createWindowContext(TYPE_APPLICATION_OVERLAY, null /* options */);
|
||||
mWm = mWindowContext.getSystemService(WindowManager.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddViewANdRemoveView_GetMetrics_DoNotCrash() {
|
||||
final View view = new View(mWindowContext);
|
||||
final WindowManager.LayoutParams params =
|
||||
new WindowManager.LayoutParams(TYPE_APPLICATION_OVERLAY);
|
||||
Handler.getMain().runWithScissors(() -> {
|
||||
mWm.addView(view, params);
|
||||
// Check get metrics do not crash.
|
||||
mWm.getCurrentWindowMetrics();
|
||||
mWm.getMaximumWindowMetrics();
|
||||
|
||||
mWm.removeViewImmediate(view);
|
||||
// Check get metrics do not crash.
|
||||
mWm.getCurrentWindowMetrics();
|
||||
mWm.getMaximumWindowMetrics();
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
@@ -45,7 +45,6 @@ public final class FrameworksTestsFilter extends SelectTest {
|
||||
"android.view.InsetsSourceTest",
|
||||
"android.view.InsetsSourceConsumerTest",
|
||||
"android.view.InsetsStateTest",
|
||||
"android.view.WindowMetricsTest"
|
||||
};
|
||||
|
||||
public FrameworksTestsFilter(Bundle testArgs) {
|
||||
|
||||
Reference in New Issue
Block a user