Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71153912 authored by Wale Ogunwale's avatar Wale Ogunwale Committed by Android (Google) Code Review
Browse files

Merge "Revert "Always get window insets from server""

parents b8144ae5 288e1bd0
Loading
Loading
Loading
Loading
+16 −9
Original line number Diff line number Diff line
@@ -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) {
+0 −3
Original line number Diff line number Diff line
@@ -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" />
+0 −81
Original line number Diff line number Diff line
/*
 * 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);
    }
}
+0 −1
Original line number Diff line number Diff line
@@ -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) {