in shadows/framework/src/main/java/org/robolectric/android/DeviceConfig.java [97:228]
static void applyToConfiguration(Qualifiers qualifiers, int apiLevel,
Configuration configuration, DisplayMetrics displayMetrics) {
ResTable_config resTab = qualifiers.getConfig();
if (resTab.mcc != 0) {
configuration.mcc = resTab.mcc;
}
if (resTab.mnc != 0) {
configuration.mnc = resTab.mnc;
}
// screenLayout includes size, long, layoutdir, and round.
// layoutdir may be overridden by setLocale(), so do this first:
int screenLayoutSize = getScreenLayoutSize(configuration);
int resTabSize = resTab.screenLayoutSize();
if (resTabSize != ResTable_config.SCREENSIZE_ANY) {
screenLayoutSize = resTabSize;
if (resTab.screenWidthDp == 0) {
configuration.screenWidthDp = 0;
}
if (resTab.screenHeightDp == 0) {
configuration.screenHeightDp = 0;
}
}
int screenLayoutLong = getScreenLayoutLong(configuration);
int resTabLong = resTab.screenLayoutLong();
if (resTabLong != ResTable_config.SCREENLONG_ANY) {
screenLayoutLong = resTabLong;
}
int screenLayoutLayoutDir = getScreenLayoutLayoutDir(configuration);
int resTabLayoutDir = resTab.screenLayoutDirection();
if (resTabLayoutDir != ResTable_config.LAYOUTDIR_ANY) {
screenLayoutLayoutDir = resTabLayoutDir;
}
int screenLayoutRound = getScreenLayoutRound(configuration);
int resTabRound = resTab.screenLayoutRound();
if (resTabRound != ResTable_config.SCREENROUND_ANY) {
screenLayoutRound = resTabRound << 8;
}
configuration.screenLayout =
screenLayoutSize | screenLayoutLong | screenLayoutLayoutDir | screenLayoutRound;
// locale...
String lang = resTab.languageString();
String region = resTab.regionString();
String script = resTab.scriptString();
Locale locale;
if (isNullOrEmpty(lang) && isNullOrEmpty(region) && isNullOrEmpty(script)) {
locale = null;
} else {
locale = new Locale.Builder()
.setLanguage(lang)
.setRegion(region)
.setScript(script == null ? "" : script)
.build();
}
if (locale != null) {
setLocale(apiLevel, configuration, locale);
}
if (resTab.smallestScreenWidthDp != 0) {
configuration.smallestScreenWidthDp = resTab.smallestScreenWidthDp;
}
if (resTab.screenWidthDp != 0) {
configuration.screenWidthDp = resTab.screenWidthDp;
}
if (resTab.screenHeightDp != 0) {
configuration.screenHeightDp = resTab.screenHeightDp;
}
if (resTab.orientation != ResTable_config.ORIENTATION_ANY) {
configuration.orientation = resTab.orientation;
}
// uiMode includes type and night...
int uiModeType = getUiModeType(configuration);
int resTabType = resTab.uiModeType();
if (resTabType != ResTable_config.UI_MODE_TYPE_ANY) {
uiModeType = resTabType;
}
int uiModeNight = getUiModeNight(configuration);
int resTabNight = resTab.uiModeNight();
if (resTabNight != ResTable_config.UI_MODE_NIGHT_ANY) {
uiModeNight = resTabNight;
}
configuration.uiMode = uiModeType | uiModeNight;
if (resTab.density != ResTable_config.DENSITY_DEFAULT) {
setDensity(resTab.density, apiLevel, configuration, displayMetrics);
}
if (resTab.touchscreen != ResTable_config.TOUCHSCREEN_ANY) {
configuration.touchscreen = resTab.touchscreen;
}
if (resTab.keyboard != ResTable_config.KEYBOARD_ANY) {
configuration.keyboard = resTab.keyboard;
}
if (resTab.keyboardHidden() != ResTable_config.KEYSHIDDEN_ANY) {
configuration.keyboardHidden = resTab.keyboardHidden();
}
if (resTab.navigation != ResTable_config.NAVIGATION_ANY) {
configuration.navigation = resTab.navigation;
}
if (resTab.navigationHidden() != ResTable_config.NAVHIDDEN_ANY) {
configuration.navigationHidden = resTab.navigationHidden();
}
if (apiLevel >= VERSION_CODES.O) {
if (resTab.colorModeWideColorGamut() != ResTable_config.WIDE_COLOR_GAMUT_ANY) {
setColorModeGamut(configuration, resTab.colorMode & ResTable_config.MASK_WIDE_COLOR_GAMUT);
}
if (resTab.colorModeHdr() != ResTable_config.HDR_ANY) {
setColorModeHdr(configuration, resTab.colorMode & ResTable_config.MASK_HDR);
}
}
}