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

Commit 992620c7 authored by Youngjun Kwak's avatar Youngjun Kwak Committed by Android (Google) Code Review
Browse files

Merge "Add vertical type check to prevent non-Automotive Androids from force...

Merge "Add vertical type check to prevent non-Automotive Androids from force displaying system bars."
parents 76c7f54d aff09ea9
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -5687,6 +5687,12 @@ public class WindowManagerService extends IWindowManager.Stub

    @Override
    public void setForceShowSystemBars(boolean show) {
        boolean isAutomotive = mContext.getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_AUTOMOTIVE);
        if (!isAutomotive) {
            throw new UnsupportedOperationException("Force showing system bars is only supported"
                    + "for Automotive use cases.");
        }
        if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR)
                != PackageManager.PERMISSION_GRANTED) {
            throw new SecurityException("Caller does not hold permission "
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.REORDER_TASKS" />
    <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
    <uses-permission android:name="android.permission.STATUS_BAR" />

    <!-- TODO: Remove largeHeap hack when memory leak is fixed (b/123984854) -->
    <application android:debuggable="true"
+60 −0
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 com.android.server.wm;

import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;

import android.content.pm.PackageManager;
import android.platform.test.annotations.Presubmit;

import androidx.test.filters.SmallTest;

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;

@SmallTest
@Presubmit
@RunWith(WindowTestRunner.class)
public class WindowManagerServiceTests extends WindowTestsBase {
    @Rule
    public ExpectedException mExpectedException = ExpectedException.none();

    @Test
    public void testForceShowSystemBarsThrowsExceptionForNonAutomotive() {
        if (!isAutomotive()) {
            mExpectedException.expect(UnsupportedOperationException.class);

            mWm.setForceShowSystemBars(true);
        }
    }

    @Test
    public void testForceShowSystemBarsDoesNotThrowExceptionForAutomotiveWithStatusBarPermission() {
        if (isAutomotive()) {
            mExpectedException.none();

            mWm.setForceShowSystemBars(true);
        }
    }

    private boolean isAutomotive() {
        return getInstrumentation().getTargetContext().getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_AUTOMOTIVE);
    }
}