Add vertical type check to prevent non-Automotive Androids from force displaying system bars.

Force displaying system bars can cause app screen compatibility issues
in non-Automotive Android.

Bug: 148407132
Test: CTS Test + Unit Tests
Change-Id: Ia433572650760e3b85954724c63084dca769eaa0
This commit is contained in:
kwaky
2020-01-27 16:03:19 -08:00
parent 5257270180
commit aff09ea932
3 changed files with 67 additions and 0 deletions

View File

@@ -5680,6 +5680,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 "

View File

@@ -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"

View File

@@ -0,0 +1,60 @@
/*
* 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);
}
}