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

Commit b8493864 authored by Adrian Roos's avatar Adrian Roos
Browse files

WindowInsets: Fix unintentional un-nulling in legacy constructor

Fixes issues arising from mistakenly turning consumed insets to zero insets
in the legacy Rect constructor.

Change-Id: Ie531fca0fba28eba25843004acfb5444ca6669cd
Fixes: 119310980
Test: atest android.view.WindowInsetsTest
parent 14540159
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -77,11 +77,17 @@ public final class WindowInsets {
        CONSUMED = new WindowInsets((Insets) null, null, null, false, false, null);
    }

    /** @hide */
    /**
     * Construct a new WindowInsets from individual insets.
     *
     * A {@code null} inset indicates that the respective inset is consumed.
     *
     * @hide
     */
    public WindowInsets(Rect systemWindowInsets, Rect windowDecorInsets, Rect stableInsets,
            boolean isRound, boolean alwaysConsumeNavBar, DisplayCutout displayCutout) {
        this(Insets.of(systemWindowInsets), Insets.of(windowDecorInsets), Insets.of(stableInsets),
                isRound, alwaysConsumeNavBar, displayCutout);
        this(insetsOrNull(systemWindowInsets), insetsOrNull(windowDecorInsets),
                insetsOrNull(stableInsets), isRound, alwaysConsumeNavBar, displayCutout);
    }

    private WindowInsets(Insets systemWindowInsets, Insets windowDecorInsets,
@@ -673,6 +679,10 @@ public final class WindowInsets {
        return Insets.of(newLeft, newTop, newRight, newBottom);
    }

    private static Insets insetsOrNull(Rect insets) {
        return insets != null ? Insets.of(insets) : null;
    }

    /**
     * @return whether system window insets have been consumed.
     */
+50 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 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 org.junit.Assert.assertTrue;

import android.graphics.Rect;
import android.platform.test.annotations.Presubmit;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;

import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
@SmallTest
@Presubmit
public class WindowInsetsTest {

    @Test
    public void systemWindowInsets_afterConsuming_isConsumed() {
        assertTrue(new WindowInsets(new Rect(1, 2, 3, 4), null, null, false, false, null)
                .consumeSystemWindowInsets().isConsumed());
    }

    @Test
    public void multiNullConstructor_isConsumed() {
        assertTrue(new WindowInsets(null, null, null, false, false, null).isConsumed());
    }

    @Test
    public void singleNullConstructor_isConsumed() {
        assertTrue(new WindowInsets((Rect) null).isConsumed());
    }

}