blob: 21002a45d01b2b82edda8e006f02a5d6840fda5a [file] [log] [blame]
/*
* 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();
assumeHasBars();
assumeFalse("Automotive navigation bar is opaque",
pm.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE));
assumeTrue("Only highEndGfx devices have colored system bars",
ActivityManager.isHighEndGfx());
}
public static void assumeHasBars() {
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));
}
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 false;
} catch (AssumptionViolatedException e) {
Log.i("BarTestUtils", "Assumption violated", e);
return true;
}
}
}