CTS: Fix EnsureBarContrastTest for products without system bars
Fixes: 136784434
Test: atest EnsureBarContrastTest LightBarTests LightBarThemeTest
Change-Id: If5abc5e09c8a3f0b5d393648dadcfec5c6ce9daf
Merged-In: If5abc5e09c8a3f0b5d393648dadcfec5c6ce9daf
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/EnsureBarContrastTest.java b/tests/framework/base/windowmanager/src/android/server/wm/EnsureBarContrastTest.java
index 331716a..4830da0 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/EnsureBarContrastTest.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/EnsureBarContrastTest.java
@@ -19,6 +19,10 @@
import static android.server.wm.EnsureBarContrastTest.TestActivity.EXTRA_ENSURE_CONTRAST;
import static android.server.wm.EnsureBarContrastTest.TestActivity.EXTRA_LIGHT_BARS;
import static android.server.wm.EnsureBarContrastTest.TestActivity.backgroundForBar;
+import static android.server.wm.BarTestUtils.assumeHasColoredBars;
+import static android.server.wm.BarTestUtils.assumeHasColoredNavigationBar;
+import static android.server.wm.BarTestUtils.assumeHasColoredStatusBar;
+import static android.server.wm.BarTestUtils.isAssumptionViolated;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
@@ -37,7 +41,6 @@
import android.view.ViewGroup;
import android.view.WindowInsets;
-import androidx.test.filters.FlakyTest;
import androidx.test.rule.ActivityTestRule;
import com.android.compatibility.common.util.PollingCheck;
@@ -45,6 +48,7 @@
import org.hamcrest.CustomTypeSafeMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
+import org.junit.AssumptionViolatedException;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ErrorCollector;
@@ -84,8 +88,13 @@
}
public void runTestEnsureContrast(boolean lightBars) {
+ assumeHasColoredBars();
TestActivity activity = launchAndWait(mTestActivity, lightBars, true /* ensureContrast */);
for (Bar bar : Bar.BARS) {
+ if (isAssumptionViolated(() -> bar.checkAssumptions(mTestActivity))) {
+ continue;
+ }
+
Bitmap bitmap = getOnMainSync(() -> activity.screenshotBar(bar, mDumper));
if (getOnMainSync(() -> activity.barIsTapThrough(bar))) {
@@ -307,6 +316,11 @@
r.bottom = r.top + getInset(insets);
return r;
}
+
+ @Override
+ void checkAssumptions(ActivityTestRule<?> rule) throws AssumptionViolatedException {
+ assumeHasColoredStatusBar(rule);
+ }
};
static final Bar NAVIGATION = new Bar("Navigation") {
@@ -321,6 +335,11 @@
r.top = r.bottom - getInset(insets);
return r;
}
+
+ @Override
+ void checkAssumptions(ActivityTestRule<?> rule) throws AssumptionViolatedException {
+ assumeHasColoredNavigationBar(rule);
+ }
};
static final Bar[] BARS = {STATUS, NAVIGATION};
@@ -334,5 +353,7 @@
abstract int getInset(Insets insets);
abstract Rect getLocation(Insets insets, Rect screen);
+
+ abstract void checkAssumptions(ActivityTestRule<?> rule) throws AssumptionViolatedException;
}
}
diff --git a/tests/framework/base/windowmanager/util/src/android/server/wm/BarTestUtils.java b/tests/framework/base/windowmanager/util/src/android/server/wm/BarTestUtils.java
new file mode 100644
index 0000000..2d524df
--- /dev/null
+++ b/tests/framework/base/windowmanager/util/src/android/server/wm/BarTestUtils.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2019 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.server.wm;
+
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+
+import static org.junit.Assume.assumeFalse;
+import static org.junit.Assume.assumeTrue;
+
+import android.app.ActivityManager;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.res.Configuration;
+import android.util.Log;
+import android.view.WindowInsets;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.rule.ActivityTestRule;
+
+import org.junit.AssumptionViolatedException;
+
+/**
+ * Common assumptions for system bar tests.
+ *
+ * TODO: Unify with copy in systemui tests.
+ */
+public final class BarTestUtils {
+
+ private BarTestUtils() {
+ }
+
+ public static void assumeHasColoredStatusBar(ActivityTestRule<?> rule) {
+ assumeHasColoredBars();
+
+ assumeFalse("No status bar when running in VR", isRunningInVr());
+
+ assumeTrue("Top stable inset is non-positive, no status bar.",
+ getInsets(rule).getStableInsetTop() > 0);
+ }
+
+ public static void assumeHasColoredNavigationBar(ActivityTestRule<?> rule) {
+ assumeHasColoredBars();
+
+ assumeTrue("Bottom stable inset is non-positive, no navigation bar",
+ getInsets(rule).getStableInsetBottom() > 0);
+ }
+
+ public static void assumeHasColoredBars() {
+ final PackageManager pm = getInstrumentation().getContext().getPackageManager();
+
+ assumeFalse("Embedded devices don't have system bars",
+ getInstrumentation().getContext().getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_EMBEDDED));
+
+ assumeFalse("No bars on watches and TVs", pm.hasSystemFeature(PackageManager.FEATURE_WATCH)
+ || pm.hasSystemFeature(PackageManager.FEATURE_TELEVISION)
+ || pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK));
+
+ assumeFalse("Automotive navigation bar is opaque",
+ pm.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE));
+
+ assumeTrue("Only highEndGfx devices have colored system bars",
+ ActivityManager.isHighEndGfx());
+ }
+
+ private static boolean isRunningInVr() {
+ final Context context = InstrumentationRegistry.getContext();
+ final Configuration config = context.getResources().getConfiguration();
+ return (config.uiMode & Configuration.UI_MODE_TYPE_MASK)
+ == Configuration.UI_MODE_TYPE_VR_HEADSET;
+ }
+
+ private static WindowInsets getInsets(ActivityTestRule<?> rule) {
+ final WindowInsets[] insets = new WindowInsets[1];
+ try {
+ rule.runOnUiThread(() -> {
+ insets[0] = rule.getActivity().getWindow().getDecorView().getRootWindowInsets();
+ });
+ } catch (Throwable t) {
+ throw new RuntimeException(t);
+ }
+ return insets[0];
+ }
+
+ public static boolean isAssumptionViolated(Runnable assumption) {
+ try {
+ assumption.run();
+ return true;
+ } catch (AssumptionViolatedException e) {
+ Log.i("BarTestUtils", "Assumption violated", e);
+ return false;
+ }
+ }
+}
diff --git a/tests/tests/systemui/Android.mk b/tests/tests/systemui/Android.mk
index facdb87..6bb72ec 100644
--- a/tests/tests/systemui/Android.mk
+++ b/tests/tests/systemui/Android.mk
@@ -29,6 +29,7 @@
LOCAL_STATIC_JAVA_LIBRARIES := \
compatibility-device-util-axt \
ctstestrunner-axt \
+ cts-wm-util \
androidx.test.rules \
ub-uiautomator
diff --git a/tests/tests/systemui/src/android/systemui/cts/LightBarTestBase.java b/tests/tests/systemui/src/android/systemui/cts/LightBarTestBase.java
index dbf3e76..9da89be 100644
--- a/tests/tests/systemui/src/android/systemui/cts/LightBarTestBase.java
+++ b/tests/tests/systemui/src/android/systemui/cts/LightBarTestBase.java
@@ -94,64 +94,6 @@
}
}
- private boolean hasVirtualNavigationBar(ActivityTestRule<? extends LightBarBaseActivity> rule)
- throws Throwable {
- final WindowInsets[] inset = new WindowInsets[1];
- rule.runOnUiThread(()-> {
- inset[0] = rule.getActivity().getRootWindowInsets();
- });
- return inset[0].getStableInsetBottom() > 0;
- }
-
- private boolean isRunningInVr() {
- final Context context = InstrumentationRegistry.getContext();
- final Configuration config = context.getResources().getConfiguration();
- return (config.uiMode & Configuration.UI_MODE_TYPE_MASK)
- == Configuration.UI_MODE_TYPE_VR_HEADSET;
- }
-
- private void assumeBasics() {
- final PackageManager pm = getInstrumentation().getContext().getPackageManager();
-
- // No bars on embedded devices.
- assumeFalse(getInstrumentation().getContext().getPackageManager().hasSystemFeature(
- PackageManager.FEATURE_EMBEDDED));
-
- // No bars on TVs and watches.
- // Automotive navigation bar is not transparent
- assumeFalse(pm.hasSystemFeature(PackageManager.FEATURE_WATCH)
- || pm.hasSystemFeature(PackageManager.FEATURE_TELEVISION)
- || pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK)
- || pm.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE));
-
-
- // Non-highEndGfx devices don't do colored system bars.
- assumeTrue(ActivityManager.isHighEndGfx());
- }
-
- protected void assumeHasColoredStatusBar(ActivityTestRule<? extends LightBarBaseActivity> rule)
- throws Throwable {
- assumeBasics();
-
- // No status bar when running in Vr
- assumeFalse(isRunningInVr());
-
- // Status bar exists only when top stable inset is positive
- final WindowInsets[] inset = new WindowInsets[1];
- rule.runOnUiThread(()-> {
- inset[0] = rule.getActivity().getRootWindowInsets();
- });
- assumeTrue("Top stable inset is non-positive.", inset[0].getStableInsetTop() > 0);
- }
-
- protected void assumeHasColoredNavigationBar(
- ActivityTestRule<? extends LightBarBaseActivity> rule) throws Throwable {
- assumeBasics();
-
- // No virtual navigation bar, so no effect.
- assumeTrue(hasVirtualNavigationBar(rule));
- }
-
protected void checkNavigationBarDivider(LightBarBaseActivity activity, int dividerColor,
int backgroundColor, String methodName) {
final Bitmap bitmap = takeNavigationBarScreenshot(activity);
diff --git a/tests/tests/systemui/src/android/systemui/cts/LightBarTests.java b/tests/tests/systemui/src/android/systemui/cts/LightBarTests.java
index 95573d1..137c003 100644
--- a/tests/tests/systemui/src/android/systemui/cts/LightBarTests.java
+++ b/tests/tests/systemui/src/android/systemui/cts/LightBarTests.java
@@ -16,6 +16,9 @@
package android.systemui.cts;
+import static android.server.wm.BarTestUtils.assumeHasColoredNavigationBar;
+import static android.server.wm.BarTestUtils.assumeHasColoredStatusBar;
+
import static androidx.test.InstrumentationRegistry.getInstrumentation;
import static org.junit.Assert.assertTrue;
diff --git a/tests/tests/systemui/src/android/systemui/cts/LightBarThemeTest.java b/tests/tests/systemui/src/android/systemui/cts/LightBarThemeTest.java
index f8036f2..7da28d0 100644
--- a/tests/tests/systemui/src/android/systemui/cts/LightBarThemeTest.java
+++ b/tests/tests/systemui/src/android/systemui/cts/LightBarThemeTest.java
@@ -16,6 +16,8 @@
package android.systemui.cts;
+import static android.server.wm.BarTestUtils.assumeHasColoredNavigationBar;
+
import static androidx.test.InstrumentationRegistry.getInstrumentation;
import static org.junit.Assert.assertEquals;