1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.content.res.cts; 18 19 import java.util.Locale; 20 21 import android.content.res.AssetManager; 22 import android.content.res.Configuration; 23 import android.content.res.Resources; 24 import android.content.res.TypedArray; 25 import android.content.res.Resources.NotFoundException; 26 import android.test.AndroidTestCase; 27 import android.test.suitebuilder.annotation.MediumTest; 28 import android.test.suitebuilder.annotation.SmallTest; 29 import android.util.DisplayMetrics; 30 import android.util.Log; 31 32 import com.android.cts.stub.R; 33 34 public class ConfigTest extends AndroidTestCase { 35 enum Properties { 36 LANGUAGE, 37 COUNTRY, 38 MCC, 39 MNC, 40 TOUCHSCREEN, 41 KEYBOARD, 42 KEYBOARDHIDDEN, 43 NAVIGATION, 44 ORIENTATION, 45 WIDTH, 46 HEIGHT, 47 DENSITY, 48 SCREENLAYOUT, 49 SWIDTH_DP, 50 WIDTH_DP, 51 HEIGHT_DP 52 } 53 54 private static void checkValue(final Resources res, final int resId, 55 final String expectedValue) { 56 try { 57 final String actual = res.getString(resId); 58 assertNotNull("Returned wrong configuration-based simple value: expected <nothing>, " 59 + "got '" + actual + "' from resource 0x" + Integer.toHexString(resId), 60 expectedValue); 61 assertEquals("Returned wrong configuration-based simple value: expected '" 62 + expectedValue + "', got '" + actual + "' from resource 0x" 63 + Integer.toHexString(resId), expectedValue, actual); 64 } catch (NotFoundException e) { 65 assertNull("Resource not found for configuration-based simple value: expecting \"" 66 + expectedValue + "\"", expectedValue); 67 } 68 } 69 70 private static void checkValue(final Resources res, final int resId, 71 final int[] styleable, final String[] expectedValues) { 72 final Resources.Theme theme = res.newTheme(); 73 final TypedArray sa = theme.obtainStyledAttributes(resId, styleable); 74 for (int i = 0; i < styleable.length; i++) { 75 final String actual = sa.getString(i); 76 assertEquals("Returned wrong configuration-based style value: expected '" 77 + expectedValues[i] + "', got '" + actual + "' from attr " 78 + i + " of resource 0x" + Integer.toHexString(resId), 79 actual, expectedValues[i]); 80 } 81 sa.recycle(); 82 } 83 84 private class TotalConfig { 85 final Configuration mConfig; 86 final DisplayMetrics mMetrics; 87 88 public TotalConfig() { 89 mConfig = new Configuration(); 90 mMetrics = new DisplayMetrics(); 91 mConfig.locale = new Locale("++", "++"); 92 } 93 94 public void setProperty(final Properties p, final int value) { 95 switch(p) { 96 case MCC: 97 mConfig.mcc = value; 98 break; 99 case MNC: 100 mConfig.mnc = value; 101 break; 102 case TOUCHSCREEN: 103 mConfig.touchscreen = value; 104 break; 105 case KEYBOARD: 106 mConfig.keyboard = value; 107 break; 108 case KEYBOARDHIDDEN: 109 mConfig.keyboardHidden = value; 110 break; 111 case NAVIGATION: 112 mConfig.navigation = value; 113 break; 114 case ORIENTATION: 115 mConfig.orientation = value; 116 break; 117 case WIDTH: 118 mMetrics.widthPixels = value; 119 break; 120 case HEIGHT: 121 mMetrics.heightPixels = value; 122 break; 123 case DENSITY: 124 // this is the ratio from the standard 125 mMetrics.density = (((float)value)/((float)DisplayMetrics.DENSITY_DEFAULT)); 126 mConfig.densityDpi = value; 127 break; 128 case SCREENLAYOUT: 129 mConfig.screenLayout = value; 130 break; 131 case SWIDTH_DP: 132 mConfig.smallestScreenWidthDp = value; 133 break; 134 case WIDTH_DP: 135 mConfig.screenWidthDp = value; 136 break; 137 case HEIGHT_DP: 138 mConfig.screenHeightDp = value; 139 break; 140 default: 141 assert(false); 142 break; 143 } 144 } 145 146 public void setProperty(final Properties p, final String value) { 147 switch(p) { 148 case LANGUAGE: 149 final String oldCountry = mConfig.locale.getCountry(); 150 mConfig.locale = new Locale(value, oldCountry); 151 break; 152 case COUNTRY: 153 final String oldLanguage = mConfig.locale.getLanguage(); 154 mConfig.locale = new Locale(oldLanguage, value); 155 break; 156 default: 157 assert(false); 158 break; 159 } 160 } 161 162 public Resources getResources() { 163 final AssetManager assmgr = new AssetManager(); 164 assmgr.addAssetPath(mContext.getPackageResourcePath()); 165 return new Resources(assmgr, mMetrics, mConfig); 166 } 167 } 168 169 public TotalConfig makeEmptyConfig() { 170 return new TotalConfig(); 171 } 172 173 public TotalConfig makeClassicConfig() { 174 TotalConfig config = new TotalConfig(); 175 config.mConfig.locale = new Locale("en", "US"); 176 config.mConfig.mcc = 310; 177 config.mConfig.mnc = 001; // unused 178 config.mConfig.touchscreen = Configuration.TOUCHSCREEN_FINGER; 179 config.mConfig.keyboard = Configuration.KEYBOARD_QWERTY; 180 config.mConfig.keyboardHidden = Configuration.KEYBOARDHIDDEN_YES; 181 config.mConfig.navigation = Configuration.NAVIGATION_TRACKBALL; 182 config.mConfig.orientation = Configuration.ORIENTATION_PORTRAIT; 183 config.mConfig.smallestScreenWidthDp = 320; 184 config.mConfig.screenWidthDp = 320; 185 config.mConfig.screenHeightDp = 480; 186 config.mConfig.densityDpi = 160; 187 config.mMetrics.widthPixels = 200; 188 config.mMetrics.heightPixels = 320; 189 config.mMetrics.density = 1; 190 return config; 191 } 192 193 private static void checkPair(Resources res, int[] notResIds, 194 int simpleRes, String simpleString, 195 int bagRes, String bagString) { 196 boolean willHave = true; 197 if (notResIds != null) { 198 for (int i : notResIds) { 199 if (i == simpleRes) { 200 willHave = false; 201 break; 202 } 203 } 204 } 205 checkValue(res, simpleRes, willHave ? simpleString : null); 206 checkValue(res, bagRes, R.styleable.TestConfig, 207 new String[]{willHave ? bagString : null}); 208 } 209 210 @SmallTest 211 public void testAllEmptyConfigs() { 212 /** 213 * Test a resource that contains a value for each possible single 214 * configuration value. 215 */ 216 TotalConfig config = makeEmptyConfig(); 217 Resources res = config.getResources(); 218 checkValue(res, R.configVarying.simple, "simple default"); 219 checkValue(res, R.configVarying.bag, 220 R.styleable.TestConfig, new String[]{"bag default"}); 221 222 config = makeEmptyConfig(); 223 config.setProperty(Properties.LANGUAGE, "xx"); 224 res = config.getResources(); 225 checkValue(res, R.configVarying.simple, "simple xx"); 226 checkValue(res, R.configVarying.bag, 227 R.styleable.TestConfig, new String[]{"bag xx"}); 228 229 config = makeEmptyConfig(); 230 config.setProperty(Properties.LANGUAGE, "xx"); 231 config.setProperty(Properties.COUNTRY, "YY"); 232 res = config.getResources(); 233 checkValue(res, R.configVarying.simple, "simple xx-rYY"); 234 checkValue(res, R.configVarying.bag, 235 R.styleable.TestConfig, new String[]{"bag xx-rYY"}); 236 237 config = makeEmptyConfig(); 238 config.setProperty(Properties.MCC, 111); 239 res = config.getResources(); 240 checkValue(res, R.configVarying.simple, "simple mcc111"); 241 checkValue(res, R.configVarying.bag, 242 R.styleable.TestConfig, new String[]{"bag mcc111"}); 243 244 config = makeEmptyConfig(); 245 config.setProperty(Properties.MNC, 222); 246 res = config.getResources(); 247 checkValue(res, R.configVarying.simple, "simple mnc222"); 248 checkValue(res, R.configVarying.bag, 249 R.styleable.TestConfig, new String[]{"bag mnc222"}); 250 251 config = makeEmptyConfig(); 252 config.setProperty(Properties.TOUCHSCREEN, Configuration.TOUCHSCREEN_NOTOUCH); 253 res = config.getResources(); 254 checkValue(res, R.configVarying.simple, "simple notouch"); 255 checkValue(res, R.configVarying.bag, 256 R.styleable.TestConfig, new String[]{"bag notouch"}); 257 258 config = makeEmptyConfig(); 259 config.setProperty(Properties.TOUCHSCREEN, Configuration.TOUCHSCREEN_STYLUS); 260 res = config.getResources(); 261 checkValue(res, R.configVarying.simple, "simple stylus"); 262 checkValue(res, R.configVarying.bag, 263 R.styleable.TestConfig, new String[]{"bag stylus"}); 264 265 config = makeEmptyConfig(); 266 config.setProperty(Properties.KEYBOARD, Configuration.KEYBOARD_NOKEYS); 267 res = config.getResources(); 268 checkValue(res, R.configVarying.simple, "simple nokeys"); 269 checkValue(res, R.configVarying.bag, 270 R.styleable.TestConfig, new String[]{"bag nokeys"}); 271 272 config = makeEmptyConfig(); 273 config.setProperty(Properties.KEYBOARD, Configuration.KEYBOARD_12KEY); 274 res = config.getResources(); 275 checkValue(res, R.configVarying.simple, "simple 12key"); 276 checkValue(res, R.configVarying.bag, 277 R.styleable.TestConfig, new String[]{"bag 12key"}); 278 279 config = makeEmptyConfig(); 280 config.setProperty(Properties.KEYBOARDHIDDEN, Configuration.KEYBOARDHIDDEN_NO); 281 res = config.getResources(); 282 checkValue(res, R.configVarying.simple, "simple keysexposed"); 283 checkValue(res, R.configVarying.bag, 284 R.styleable.TestConfig, new String[]{"bag keysexposed"}); 285 286 config = makeEmptyConfig(); 287 config.setProperty(Properties.NAVIGATION, Configuration.NAVIGATION_NONAV); 288 res = config.getResources(); 289 checkValue(res, R.configVarying.simple, "simple nonav"); 290 checkValue(res, R.configVarying.bag, 291 R.styleable.TestConfig, new String[]{"bag nonav"}); 292 293 config = makeEmptyConfig(); 294 config.setProperty(Properties.NAVIGATION, Configuration.NAVIGATION_DPAD); 295 res = config.getResources(); 296 checkValue(res, R.configVarying.simple, "simple dpad"); 297 checkValue(res, R.configVarying.bag, 298 R.styleable.TestConfig, new String[]{"bag dpad"}); 299 300 config = makeEmptyConfig(); 301 config.setProperty(Properties.NAVIGATION, Configuration.NAVIGATION_WHEEL); 302 res = config.getResources(); 303 checkValue(res, R.configVarying.simple, "simple wheel"); 304 checkValue(res, R.configVarying.bag, 305 R.styleable.TestConfig, new String[]{"bag wheel"}); 306 307 config = makeEmptyConfig(); 308 config.setProperty(Properties.HEIGHT, 480); 309 config.setProperty(Properties.WIDTH, 320); 310 res = config.getResources(); 311 checkValue(res, R.configVarying.simple, "simple 480x320"); 312 checkValue(res, R.configVarying.bag, 313 R.styleable.TestConfig, new String[]{"bag 480x320"}); 314 315 config = makeEmptyConfig(); 316 config.setProperty(Properties.DENSITY, 240); 317 res = config.getResources(); 318 checkValue(res, R.configVarying.simple, "simple 240dpi"); 319 checkValue(res, R.configVarying.bag, 320 R.styleable.TestConfig, new String[]{"bag 240dpi"}); 321 322 config = makeEmptyConfig(); 323 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_LANDSCAPE); 324 res = config.getResources(); 325 checkValue(res, R.configVarying.simple, "simple landscape"); 326 checkValue(res, R.configVarying.bag, 327 R.styleable.TestConfig, new String[]{"bag landscape"}); 328 329 config = makeEmptyConfig(); 330 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_SQUARE); 331 res = config.getResources(); 332 checkValue(res, R.configVarying.simple, "simple square"); 333 checkValue(res, R.configVarying.bag, 334 R.styleable.TestConfig, new String[]{"bag square"}); 335 336 config = makeEmptyConfig(); 337 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_SMALL); 338 res = config.getResources(); 339 checkValue(res, R.configVarying.simple, "simple small"); 340 checkValue(res, R.configVarying.bag, 341 R.styleable.TestConfig, new String[]{"bag small"}); 342 343 config = makeEmptyConfig(); 344 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_NORMAL); 345 res = config.getResources(); 346 checkValue(res, R.configVarying.simple, "simple normal"); 347 checkValue(res, R.configVarying.bag, 348 R.styleable.TestConfig, new String[]{"bag normal"}); 349 350 config = makeEmptyConfig(); 351 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_LARGE); 352 res = config.getResources(); 353 checkValue(res, R.configVarying.simple, "simple large"); 354 checkValue(res, R.configVarying.bag, 355 R.styleable.TestConfig, new String[]{"bag large"}); 356 357 config = makeEmptyConfig(); 358 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_XLARGE); 359 res = config.getResources(); 360 checkValue(res, R.configVarying.simple, "simple xlarge"); 361 checkValue(res, R.configVarying.bag, 362 R.styleable.TestConfig, new String[]{"bag xlarge"}); 363 364 config = makeEmptyConfig(); 365 config.setProperty(Properties.SWIDTH_DP, 600); 366 res = config.getResources(); 367 checkValue(res, R.configVarying.simple, "simple sw600"); 368 checkValue(res, R.configVarying.bag, 369 R.styleable.TestConfig, new String[]{"bag sw600"}); 370 371 config = makeEmptyConfig(); 372 config.setProperty(Properties.SWIDTH_DP, 600); 373 res = config.getResources(); 374 checkValue(res, R.configVarying.simple, "simple sw600"); 375 checkValue(res, R.configVarying.bag, 376 R.styleable.TestConfig, new String[]{"bag sw600"}); 377 378 config = makeEmptyConfig(); 379 config.setProperty(Properties.SWIDTH_DP, 720); 380 res = config.getResources(); 381 checkValue(res, R.configVarying.simple, "simple sw720"); 382 checkValue(res, R.configVarying.bag, 383 R.styleable.TestConfig, new String[]{"bag sw720"}); 384 385 config = makeEmptyConfig(); 386 config.setProperty(Properties.WIDTH_DP, 600); 387 res = config.getResources(); 388 checkValue(res, R.configVarying.simple, "simple w600"); 389 checkValue(res, R.configVarying.bag, 390 R.styleable.TestConfig, new String[]{"bag w600"}); 391 392 config = makeEmptyConfig(); 393 config.setProperty(Properties.WIDTH_DP, 720); 394 res = config.getResources(); 395 checkValue(res, R.configVarying.simple, "simple w720"); 396 checkValue(res, R.configVarying.bag, 397 R.styleable.TestConfig, new String[]{"bag w720"}); 398 399 config = makeEmptyConfig(); 400 config.setProperty(Properties.HEIGHT_DP, 550); 401 res = config.getResources(); 402 checkValue(res, R.configVarying.simple, "simple h550"); 403 checkValue(res, R.configVarying.bag, 404 R.styleable.TestConfig, new String[]{"bag h550"}); 405 406 config = makeEmptyConfig(); 407 config.setProperty(Properties.HEIGHT_DP, 670); 408 res = config.getResources(); 409 checkValue(res, R.configVarying.simple, "simple h670"); 410 checkValue(res, R.configVarying.bag, 411 R.styleable.TestConfig, new String[]{"bag h670"}); 412 } 413 414 @SmallTest 415 public void testAllClassicConfigs() { 416 /** 417 * Test a resource that contains a value for each possible single 418 * configuration value. 419 */ 420 TotalConfig config = makeClassicConfig(); 421 Resources res = config.getResources(); 422 checkValue(res, R.configVarying.simple, "simple default"); 423 checkValue(res, R.configVarying.bag, 424 R.styleable.TestConfig, new String[]{"bag default"}); 425 426 config = makeClassicConfig(); 427 config.setProperty(Properties.LANGUAGE, "xx"); 428 res = config.getResources(); 429 checkValue(res, R.configVarying.simple, "simple xx"); 430 checkValue(res, R.configVarying.bag, 431 R.styleable.TestConfig, new String[]{"bag xx"}); 432 433 config = makeClassicConfig(); 434 config.setProperty(Properties.LANGUAGE, "xx"); 435 config.setProperty(Properties.COUNTRY, "YY"); 436 res = config.getResources(); 437 checkValue(res, R.configVarying.simple, "simple xx-rYY"); 438 checkValue(res, R.configVarying.bag, 439 R.styleable.TestConfig, new String[]{"bag xx-rYY"}); 440 441 config = makeClassicConfig(); 442 config.setProperty(Properties.MCC, 111); 443 res = config.getResources(); 444 checkValue(res, R.configVarying.simple, "simple mcc111"); 445 checkValue(res, R.configVarying.bag, 446 R.styleable.TestConfig, new String[]{"bag mcc111"}); 447 448 config = makeClassicConfig(); 449 config.setProperty(Properties.MNC, 222); 450 res = config.getResources(); 451 checkValue(res, R.configVarying.simple, "simple mnc222"); 452 checkValue(res, R.configVarying.bag, 453 R.styleable.TestConfig, new String[]{"bag mnc222"}); 454 455 config = makeClassicConfig(); 456 config.setProperty(Properties.TOUCHSCREEN, Configuration.TOUCHSCREEN_NOTOUCH); 457 res = config.getResources(); 458 checkValue(res, R.configVarying.simple, "simple notouch"); 459 checkValue(res, R.configVarying.bag, 460 R.styleable.TestConfig, new String[]{"bag notouch"}); 461 462 config = makeClassicConfig(); 463 config.setProperty(Properties.TOUCHSCREEN, Configuration.TOUCHSCREEN_STYLUS); 464 res = config.getResources(); 465 checkValue(res, R.configVarying.simple, "simple stylus"); 466 checkValue(res, R.configVarying.bag, 467 R.styleable.TestConfig, new String[]{"bag stylus"}); 468 469 config = makeClassicConfig(); 470 config.setProperty(Properties.KEYBOARD, Configuration.KEYBOARD_NOKEYS); 471 res = config.getResources(); 472 checkValue(res, R.configVarying.simple, "simple nokeys"); 473 checkValue(res, R.configVarying.bag, 474 R.styleable.TestConfig, new String[]{"bag nokeys"}); 475 476 config = makeClassicConfig(); 477 config.setProperty(Properties.KEYBOARD, Configuration.KEYBOARD_12KEY); 478 res = config.getResources(); 479 checkValue(res, R.configVarying.simple, "simple 12key 63x57"); 480 checkValue(res, R.configVarying.bag, 481 R.styleable.TestConfig, new String[]{"bag 12key 63x57"}); 482 483 config = makeClassicConfig(); 484 config.setProperty(Properties.KEYBOARDHIDDEN, Configuration.KEYBOARDHIDDEN_NO); 485 res = config.getResources(); 486 checkValue(res, R.configVarying.simple, "simple keysexposed"); 487 checkValue(res, R.configVarying.bag, 488 R.styleable.TestConfig, new String[]{"bag keysexposed"}); 489 490 config = makeClassicConfig(); 491 config.setProperty(Properties.NAVIGATION, Configuration.NAVIGATION_NONAV); 492 res = config.getResources(); 493 checkValue(res, R.configVarying.simple, "simple nonav"); 494 checkValue(res, R.configVarying.bag, 495 R.styleable.TestConfig, new String[]{"bag nonav"}); 496 497 config = makeClassicConfig(); 498 config.setProperty(Properties.NAVIGATION, Configuration.NAVIGATION_DPAD); 499 res = config.getResources(); 500 checkValue(res, R.configVarying.simple, "simple dpad 63x57"); 501 checkValue(res, R.configVarying.bag, 502 R.styleable.TestConfig, new String[]{"bag dpad 63x57"}); 503 504 config = makeClassicConfig(); 505 config.setProperty(Properties.NAVIGATION, Configuration.NAVIGATION_WHEEL); 506 res = config.getResources(); 507 checkValue(res, R.configVarying.simple, "simple wheel"); 508 checkValue(res, R.configVarying.bag, 509 R.styleable.TestConfig, new String[]{"bag wheel"}); 510 511 config = makeClassicConfig(); 512 config.setProperty(Properties.HEIGHT, 480); 513 config.setProperty(Properties.WIDTH, 320); 514 res = config.getResources(); 515 checkValue(res, R.configVarying.simple, "simple 480x320"); 516 checkValue(res, R.configVarying.bag, 517 R.styleable.TestConfig, new String[]{"bag 480x320"}); 518 519 config = makeClassicConfig(); 520 config.setProperty(Properties.DENSITY, 240); 521 res = config.getResources(); 522 checkValue(res, R.configVarying.simple, "simple 240dpi"); 523 checkValue(res, R.configVarying.bag, 524 R.styleable.TestConfig, new String[]{"bag 240dpi"}); 525 526 config = makeClassicConfig(); 527 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_LANDSCAPE); 528 res = config.getResources(); 529 checkValue(res, R.configVarying.simple, "simple landscape"); 530 checkValue(res, R.configVarying.bag, 531 R.styleable.TestConfig, new String[]{"bag landscape"}); 532 533 config = makeClassicConfig(); 534 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_SQUARE); 535 res = config.getResources(); 536 checkValue(res, R.configVarying.simple, "simple square"); 537 checkValue(res, R.configVarying.bag, 538 R.styleable.TestConfig, new String[]{"bag square"}); 539 540 config = makeClassicConfig(); 541 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_SMALL); 542 res = config.getResources(); 543 checkValue(res, R.configVarying.simple, "simple small"); 544 checkValue(res, R.configVarying.bag, 545 R.styleable.TestConfig, new String[]{"bag small"}); 546 547 config = makeClassicConfig(); 548 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_NORMAL); 549 res = config.getResources(); 550 checkValue(res, R.configVarying.simple, "simple normal"); 551 checkValue(res, R.configVarying.bag, 552 R.styleable.TestConfig, new String[]{"bag normal"}); 553 554 config = makeClassicConfig(); 555 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_LARGE); 556 res = config.getResources(); 557 checkValue(res, R.configVarying.simple, "simple large"); 558 checkValue(res, R.configVarying.bag, 559 R.styleable.TestConfig, new String[]{"bag large"}); 560 561 config = makeClassicConfig(); 562 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_XLARGE); 563 res = config.getResources(); 564 checkValue(res, R.configVarying.simple, "simple xlarge"); 565 checkValue(res, R.configVarying.bag, 566 R.styleable.TestConfig, new String[]{"bag xlarge"}); 567 568 config = makeClassicConfig(); 569 config.setProperty(Properties.SWIDTH_DP, 600); 570 res = config.getResources(); 571 checkValue(res, R.configVarying.simple, "simple sw600"); 572 checkValue(res, R.configVarying.bag, 573 R.styleable.TestConfig, new String[]{"bag sw600"}); 574 575 config = makeClassicConfig(); 576 config.setProperty(Properties.SWIDTH_DP, 600); 577 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_LANDSCAPE); 578 res = config.getResources(); 579 checkValue(res, R.configVarying.simple, "simple sw600 land"); 580 checkValue(res, R.configVarying.bag, 581 R.styleable.TestConfig, new String[]{"bag sw600 land"}); 582 583 config = makeClassicConfig(); 584 config.setProperty(Properties.SWIDTH_DP, 720); 585 res = config.getResources(); 586 checkValue(res, R.configVarying.simple, "simple sw720"); 587 checkValue(res, R.configVarying.bag, 588 R.styleable.TestConfig, new String[]{"bag sw720"}); 589 590 config = makeClassicConfig(); 591 config.setProperty(Properties.WIDTH_DP, 600); 592 res = config.getResources(); 593 checkValue(res, R.configVarying.simple, "simple w600"); 594 checkValue(res, R.configVarying.bag, 595 R.styleable.TestConfig, new String[]{"bag w600"}); 596 597 config = makeClassicConfig(); 598 config.setProperty(Properties.WIDTH_DP, 720); 599 res = config.getResources(); 600 checkValue(res, R.configVarying.simple, "simple w720"); 601 checkValue(res, R.configVarying.bag, 602 R.styleable.TestConfig, new String[]{"bag w720"}); 603 604 config = makeClassicConfig(); 605 config.setProperty(Properties.HEIGHT_DP, 550); 606 res = config.getResources(); 607 checkValue(res, R.configVarying.simple, "simple h550"); 608 checkValue(res, R.configVarying.bag, 609 R.styleable.TestConfig, new String[]{"bag h550"}); 610 611 config = makeClassicConfig(); 612 config.setProperty(Properties.HEIGHT_DP, 670); 613 res = config.getResources(); 614 checkValue(res, R.configVarying.simple, "simple h670"); 615 checkValue(res, R.configVarying.bag, 616 R.styleable.TestConfig, new String[]{"bag h670"}); 617 } 618 619 @MediumTest 620 public void testDensity() throws Exception { 621 // have 32, 240 and the default 160 content. 622 // rule is that closest wins, with down scaling (larger content) 623 // being twice as nice as upscaling. 624 // transition at H/2 * (-1 +/- sqrt(1+8L/H)) 625 // SO, X < 49 goes to 32 626 // 49 >= X < 182 goes to 160 627 // X >= 182 goes to 240 628 TotalConfig config = makeClassicConfig(); 629 config.setProperty(Properties.DENSITY, 2); 630 Resources res = config.getResources(); 631 checkValue(res, R.configVarying.simple, "simple 32dpi"); 632 checkValue(res, R.configVarying.bag, 633 R.styleable.TestConfig, new String[]{"bag 32dpi"}); 634 635 config = makeClassicConfig(); 636 config.setProperty(Properties.DENSITY, 32); 637 res = config.getResources(); 638 checkValue(res, R.configVarying.simple, "simple 32dpi"); 639 checkValue(res, R.configVarying.bag, 640 R.styleable.TestConfig, new String[]{"bag 32dpi"}); 641 642 config = makeClassicConfig(); 643 config.setProperty(Properties.DENSITY, 48); 644 res = config.getResources(); 645 checkValue(res, R.configVarying.simple, "simple 32dpi"); 646 checkValue(res, R.configVarying.bag, 647 R.styleable.TestConfig, new String[]{"bag 32dpi"}); 648 649 config = makeClassicConfig(); 650 config.setProperty(Properties.DENSITY, 49); 651 res = config.getResources(); 652 checkValue(res, R.configVarying.simple, "simple default"); 653 checkValue(res, R.configVarying.bag, 654 R.styleable.TestConfig, new String[]{"bag default"}); 655 656 config = makeClassicConfig(); 657 config.setProperty(Properties.DENSITY, 150); 658 res = config.getResources(); 659 checkValue(res, R.configVarying.simple, "simple default"); 660 checkValue(res, R.configVarying.bag, 661 R.styleable.TestConfig, new String[]{"bag default"}); 662 663 config = makeClassicConfig(); 664 config.setProperty(Properties.DENSITY, 181); 665 res = config.getResources(); 666 checkValue(res, R.configVarying.simple, "simple default"); 667 checkValue(res, R.configVarying.bag, 668 R.styleable.TestConfig, new String[]{"bag default"}); 669 670 config = makeClassicConfig(); 671 config.setProperty(Properties.DENSITY, 182); 672 res = config.getResources(); 673 checkValue(res, R.configVarying.simple, "simple 240dpi"); 674 checkValue(res, R.configVarying.bag, 675 R.styleable.TestConfig, new String[]{"bag 240dpi"}); 676 677 config = makeClassicConfig(); 678 config.setProperty(Properties.DENSITY, 239); 679 res = config.getResources(); 680 checkValue(res, R.configVarying.simple, "simple 240dpi"); 681 checkValue(res, R.configVarying.bag, 682 R.styleable.TestConfig, new String[]{"bag 240dpi"}); 683 684 config = makeClassicConfig(); 685 config.setProperty(Properties.DENSITY, 490); 686 res = config.getResources(); 687 checkValue(res, R.configVarying.simple, "simple 240dpi"); 688 checkValue(res, R.configVarying.bag, 689 R.styleable.TestConfig, new String[]{"bag 240dpi"}); 690 } 691 692 @MediumTest 693 public void testScreenSize() throws Exception { 694 // ensure that we fall back to the best available screen size 695 // for a given configuration. 696 TotalConfig config = makeClassicConfig(); 697 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_SMALL); 698 Resources res = config.getResources(); 699 checkValue(res, R.configVarying.simple, "simple small"); 700 checkValue(res, R.configVarying.small, "small"); 701 checkValue(res, R.configVarying.normal, "default"); 702 checkValue(res, R.configVarying.large, "default"); 703 checkValue(res, R.configVarying.xlarge, "default"); 704 705 config = makeClassicConfig(); 706 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_NORMAL); 707 res = config.getResources(); 708 checkValue(res, R.configVarying.simple, "simple normal"); 709 checkValue(res, R.configVarying.small, "default"); 710 checkValue(res, R.configVarying.normal, "normal"); 711 checkValue(res, R.configVarying.large, "default"); 712 checkValue(res, R.configVarying.xlarge, "default"); 713 714 config = makeClassicConfig(); 715 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_LARGE); 716 res = config.getResources(); 717 checkValue(res, R.configVarying.simple, "simple large"); 718 checkValue(res, R.configVarying.small, "default"); 719 checkValue(res, R.configVarying.normal, "normal"); 720 checkValue(res, R.configVarying.large, "large"); 721 checkValue(res, R.configVarying.xlarge, "default"); 722 723 config = makeClassicConfig(); 724 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_XLARGE); 725 res = config.getResources(); 726 checkValue(res, R.configVarying.simple, "simple xlarge"); 727 checkValue(res, R.configVarying.small, "default"); 728 checkValue(res, R.configVarying.normal, "normal"); 729 checkValue(res, R.configVarying.large, "large"); 730 checkValue(res, R.configVarying.xlarge, "xlarge"); 731 } 732 733 @MediumTest 734 public void testNewScreenSize() throws Exception { 735 // ensure that swNNNdp, wNNNdp, and hNNNdp are working correctly 736 // for various common screen configurations. 737 TotalConfig config = makeClassicConfig(); 738 config.setProperty(Properties.SWIDTH_DP, 589); 739 config.setProperty(Properties.WIDTH_DP, 589); 740 config.setProperty(Properties.HEIGHT_DP, 500); 741 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_LANDSCAPE); 742 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_LARGE); 743 Resources res = config.getResources(); 744 checkValue(res, R.configVarying.simple, "simple large"); 745 checkValue(res, R.configVarying.sw, "default"); 746 checkValue(res, R.configVarying.w, "default"); 747 checkValue(res, R.configVarying.h, "default"); 748 checkValue(res, R.configVarying.wh, "default"); 749 750 config = makeClassicConfig(); 751 config.setProperty(Properties.SWIDTH_DP, 590); 752 config.setProperty(Properties.WIDTH_DP, 590); 753 config.setProperty(Properties.HEIGHT_DP, 500); 754 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_LANDSCAPE); 755 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_LARGE); 756 config.setProperty(Properties.DENSITY, DisplayMetrics.DENSITY_MEDIUM); 757 res = config.getResources(); 758 checkValue(res, R.configVarying.simple, "simple sw590 mdpi"); 759 checkValue(res, R.configVarying.sw, "590 mdpi"); 760 761 config.setProperty(Properties.DENSITY, DisplayMetrics.DENSITY_HIGH); 762 res = config.getResources(); 763 checkValue(res, R.configVarying.simple, "simple sw590 hdpi"); 764 checkValue(res, R.configVarying.sw, "590 hdpi"); 765 766 config.setProperty(Properties.DENSITY, DisplayMetrics.DENSITY_XHIGH); 767 res = config.getResources(); 768 checkValue(res, R.configVarying.simple, "simple sw590 xhdpi"); 769 checkValue(res, R.configVarying.sw, "590 xhdpi"); 770 771 config.setProperty(Properties.SWIDTH_DP, 591); 772 config.setProperty(Properties.WIDTH_DP, 591); 773 config.setProperty(Properties.DENSITY, DisplayMetrics.DENSITY_MEDIUM); 774 res = config.getResources(); 775 checkValue(res, R.configVarying.simple, "simple sw591"); 776 checkValue(res, R.configVarying.sw, "591"); 777 778 config.setProperty(Properties.DENSITY, DisplayMetrics.DENSITY_HIGH); 779 res = config.getResources(); 780 checkValue(res, R.configVarying.simple, "simple sw591 hdpi"); 781 checkValue(res, R.configVarying.sw, "591 hdpi"); 782 783 config.setProperty(Properties.DENSITY, DisplayMetrics.DENSITY_XHIGH); 784 res = config.getResources(); 785 checkValue(res, R.configVarying.simple, "simple sw591 hdpi"); 786 checkValue(res, R.configVarying.sw, "591 hdpi"); 787 788 config = makeClassicConfig(); 789 config.setProperty(Properties.SWIDTH_DP, 480); 790 config.setProperty(Properties.WIDTH_DP, 800); 791 config.setProperty(Properties.HEIGHT_DP, 480); 792 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_LANDSCAPE); 793 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_LARGE); 794 res = config.getResources(); 795 checkValue(res, R.configVarying.simple, "simple w720"); 796 checkValue(res, R.configVarying.sw, "default"); 797 checkValue(res, R.configVarying.w, "720"); 798 checkValue(res, R.configVarying.h, "default"); 799 checkValue(res, R.configVarying.wh, "600"); 800 801 config = makeClassicConfig(); 802 config.setProperty(Properties.SWIDTH_DP, 600); 803 config.setProperty(Properties.WIDTH_DP, 1024); 804 config.setProperty(Properties.HEIGHT_DP, 552); 805 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_LANDSCAPE); 806 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_LARGE); 807 res = config.getResources(); 808 checkValue(res, R.configVarying.simple, "simple sw600 land"); 809 checkValue(res, R.configVarying.sw, "600 land"); 810 checkValue(res, R.configVarying.w, "720"); 811 checkValue(res, R.configVarying.h, "550"); 812 checkValue(res, R.configVarying.wh, "600-550"); 813 814 config = makeClassicConfig(); 815 config.setProperty(Properties.SWIDTH_DP, 600); 816 config.setProperty(Properties.WIDTH_DP, 600); 817 config.setProperty(Properties.HEIGHT_DP, 974); 818 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_PORTRAIT); 819 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_LARGE); 820 res = config.getResources(); 821 checkValue(res, R.configVarying.simple, "simple sw600"); 822 checkValue(res, R.configVarying.sw, "600"); 823 checkValue(res, R.configVarying.w, "600"); 824 checkValue(res, R.configVarying.h, "670"); 825 checkValue(res, R.configVarying.wh, "600-550"); 826 827 config = makeClassicConfig(); 828 config.setProperty(Properties.SWIDTH_DP, 719); 829 config.setProperty(Properties.WIDTH_DP, 1279); 830 config.setProperty(Properties.HEIGHT_DP, 669); 831 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_LANDSCAPE); 832 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_LARGE); 833 res = config.getResources(); 834 checkValue(res, R.configVarying.simple, "simple sw600 land"); 835 checkValue(res, R.configVarying.sw, "600 land"); 836 checkValue(res, R.configVarying.w, "720"); 837 checkValue(res, R.configVarying.h, "550"); 838 checkValue(res, R.configVarying.wh, "600-550"); 839 840 config = makeClassicConfig(); 841 config.setProperty(Properties.SWIDTH_DP, 800); 842 config.setProperty(Properties.WIDTH_DP, 1280); 843 config.setProperty(Properties.HEIGHT_DP, 672); 844 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_LANDSCAPE); 845 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_XLARGE); 846 res = config.getResources(); 847 checkValue(res, R.configVarying.simple, "simple sw720"); 848 checkValue(res, R.configVarying.sw, "720"); 849 checkValue(res, R.configVarying.w, "720"); 850 checkValue(res, R.configVarying.h, "670"); 851 checkValue(res, R.configVarying.wh, "720-670"); 852 853 config = makeClassicConfig(); 854 config.setProperty(Properties.SWIDTH_DP, 800); 855 config.setProperty(Properties.WIDTH_DP, 720); 856 config.setProperty(Properties.HEIGHT_DP, 1230); 857 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_PORTRAIT); 858 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_XLARGE); 859 res = config.getResources(); 860 checkValue(res, R.configVarying.simple, "simple sw720"); 861 checkValue(res, R.configVarying.sw, "720"); 862 checkValue(res, R.configVarying.w, "720"); 863 checkValue(res, R.configVarying.h, "670"); 864 checkValue(res, R.configVarying.wh, "720-670"); 865 } 866 867 // TODO - add tests for special cases - ie, other key params seem ignored if 868 // nokeys is set 869 870 @MediumTest 871 public void testPrecidence() { 872 /** 873 * Check for precidence of resources selected when there are multiple 874 * options matching the current config. 875 */ 876 TotalConfig config = makeEmptyConfig(); 877 config.setProperty(Properties.HEIGHT, 640); 878 config.setProperty(Properties.WIDTH, 400); 879 Resources res = config.getResources(); 880 checkValue(res, R.configVarying.simple, "simple 640x400"); 881 checkValue(res, R.configVarying.bag, 882 R.styleable.TestConfig, new String[]{"bag 640x400"}); 883 884 config.setProperty(Properties.NAVIGATION, Configuration.NAVIGATION_NONAV); 885 res = config.getResources(); 886 checkValue(res, R.configVarying.simple, "simple nonav"); 887 checkValue(res, R.configVarying.bag, 888 R.styleable.TestConfig, new String[]{"bag nonav"}); 889 890 config.setProperty(Properties.KEYBOARD, Configuration.KEYBOARD_NOKEYS); 891 res = config.getResources(); 892 checkValue(res, R.configVarying.simple, "simple nokeys"); 893 checkValue(res, R.configVarying.bag, 894 R.styleable.TestConfig, new String[]{"bag nokeys"}); 895 896 config.setProperty(Properties.KEYBOARDHIDDEN, Configuration.KEYBOARDHIDDEN_NO); 897 res = config.getResources(); 898 checkValue(res, R.configVarying.simple, "simple keysexposed"); 899 checkValue(res, R.configVarying.bag, 900 R.styleable.TestConfig, new String[]{"bag keysexposed"}); 901 902 config.setProperty(Properties.TOUCHSCREEN, Configuration.TOUCHSCREEN_NOTOUCH); 903 res = config.getResources(); 904 checkValue(res, R.configVarying.simple, "simple notouch"); 905 checkValue(res, R.configVarying.bag, 906 R.styleable.TestConfig, new String[]{"bag notouch"}); 907 908 config.setProperty(Properties.DENSITY, 240); 909 res = config.getResources(); 910 checkValue(res, R.configVarying.simple, "simple 240dpi"); 911 checkValue(res, R.configVarying.bag, 912 R.styleable.TestConfig, new String[]{"bag 240dpi"}); 913 914 config.setProperty(Properties.ORIENTATION, Configuration.ORIENTATION_LANDSCAPE); 915 res = config.getResources(); 916 checkValue(res, R.configVarying.simple, "simple landscape"); 917 checkValue(res, R.configVarying.bag, 918 R.styleable.TestConfig, new String[]{"bag landscape"}); 919 920 config.setProperty(Properties.SCREENLAYOUT, Configuration.SCREENLAYOUT_SIZE_XLARGE); 921 res = config.getResources(); 922 checkValue(res, R.configVarying.simple, "simple xlarge"); 923 checkValue(res, R.configVarying.bag, 924 R.styleable.TestConfig, new String[]{"bag xlarge"}); 925 926 config.setProperty(Properties.HEIGHT_DP, 670); 927 res = config.getResources(); 928 checkValue(res, R.configVarying.simple, "simple h670"); 929 checkValue(res, R.configVarying.bag, 930 R.styleable.TestConfig, new String[]{"bag h670"}); 931 932 config.setProperty(Properties.WIDTH_DP, 720); 933 res = config.getResources(); 934 checkValue(res, R.configVarying.simple, "simple 720-670"); 935 checkValue(res, R.configVarying.bag, 936 R.styleable.TestConfig, new String[]{"bag 720-670"}); 937 938 config.setProperty(Properties.SWIDTH_DP, 720); 939 res = config.getResources(); 940 checkValue(res, R.configVarying.simple, "simple sw720"); 941 checkValue(res, R.configVarying.bag, 942 R.styleable.TestConfig, new String[]{"bag sw720"}); 943 944 config.setProperty(Properties.LANGUAGE, "xx"); 945 config.setProperty(Properties.COUNTRY, "YY"); 946 res = config.getResources(); 947 checkValue(res, R.configVarying.simple, "simple xx-rYY"); 948 checkValue(res, R.configVarying.bag, 949 R.styleable.TestConfig, new String[]{"bag xx-rYY"}); 950 951 config.setProperty(Properties.MCC, 111); 952 res = config.getResources(); 953 checkValue(res, R.configVarying.simple, "simple mcc111 xx-rYY"); 954 checkValue(res, R.configVarying.bag, 955 R.styleable.TestConfig, new String[]{"bag mcc111 xx-rYY"}); 956 957 config.setProperty(Properties.MNC, 222); 958 res = config.getResources(); 959 checkValue(res, R.configVarying.simple, "simple mcc111 mnc222"); 960 checkValue(res, R.configVarying.bag, 961 R.styleable.TestConfig, new String[]{"bag mcc111 mnc222"}); 962 } 963 964 @MediumTest 965 public void testCombinations() { 966 /** 967 * Verify that in cases of ties, the specific ordering is followed 968 */ 969 970 /** 971 * Precidence order: mcc, mnc, locale, swdp, wdp, hdp, screenlayout-size, 972 * screenlayout-long, orientation, density, 973 * touchscreen, hidden, keyboard, navigation, width-height 974 */ 975 976 /** 977 * verify mcc trumps mnc. Have 110-xx, 220-xx but no 110-220 978 * so which is selected? Should be mcc110-xx. 979 */ 980 TotalConfig config = makeClassicConfig(); 981 config.setProperty(Properties.MCC, 110); 982 config.setProperty(Properties.MNC, 220); 983 config.setProperty(Properties.LANGUAGE, "xx"); 984 Resources res = config.getResources(); 985 checkValue(res, R.configVarying.simple, "simple mcc110 xx"); 986 checkValue(res, R.configVarying.bag, 987 R.styleable.TestConfig, new String[]{"bag mcc110 xx"}); 988 989 /* full A + B + C doesn't exist. Do we get A + C or B + C? 990 */ 991 config = makeClassicConfig(); 992 config.setProperty(Properties.MCC, 111); 993 config.setProperty(Properties.MNC, 222); 994 config.setProperty(Properties.LANGUAGE, "xx"); 995 res = config.getResources(); 996 checkValue(res, R.configVarying.simple, "simple mcc111 mnc222"); 997 checkValue(res, R.configVarying.bag, 998 R.styleable.TestConfig, new String[]{"bag mcc111 mnc222"}); 999 1000 config = makeClassicConfig(); 1001 config.setProperty(Properties.MNC, 222); 1002 config.setProperty(Properties.LANGUAGE, "xx"); 1003 config.setProperty(Properties.ORIENTATION, 1004 Configuration.ORIENTATION_SQUARE); 1005 res = config.getResources(); 1006 checkValue(res, R.configVarying.simple, "simple mnc222 xx"); 1007 checkValue(res, R.configVarying.bag, 1008 R.styleable.TestConfig, new String[]{"bag mnc222 xx"}); 1009 1010 config = makeClassicConfig(); 1011 config.setProperty(Properties.LANGUAGE, "xx"); 1012 config.setProperty(Properties.ORIENTATION, 1013 Configuration.ORIENTATION_SQUARE); 1014 config.setProperty(Properties.DENSITY, 32); 1015 res = config.getResources(); 1016 checkValue(res, R.configVarying.simple, "simple xx square"); 1017 checkValue(res, R.configVarying.bag, 1018 R.styleable.TestConfig, new String[]{"bag xx square"}); 1019 1020 /** 1021 * Verify that proper strings are found for multiple-selectivity case 1022 * (ie, a string set for locale and mcc is found only when both are 1023 * true). 1024 */ 1025 config = makeClassicConfig(); 1026 config.setProperty(Properties.LANGUAGE, "xx"); 1027 config.setProperty(Properties.COUNTRY, "YY"); 1028 config.setProperty(Properties.MCC, 111); 1029 res = config.getResources(); 1030 checkValue(res, R.configVarying.simple, "simple mcc111 xx-rYY"); 1031 checkValue(res, R.configVarying.bag, R.styleable.TestConfig, 1032 new String[] { "bag mcc111 xx-rYY" }); 1033 1034 config = makeClassicConfig(); 1035 config.setProperty(Properties.LANGUAGE, "xx"); 1036 config.setProperty(Properties.COUNTRY, "YY"); 1037 config.setProperty(Properties.MCC, 333); 1038 res = config.getResources(); 1039 checkValue(res, R.configVarying.simple, "simple xx-rYY"); 1040 checkValue(res, R.configVarying.bag, 1041 R.styleable.TestConfig, new String[] { "bag xx-rYY" }); 1042 1043 config = makeClassicConfig(); 1044 config.setProperty(Properties.MNC, 333); 1045 res = config.getResources(); 1046 checkValue(res, R.configVarying.simple, "simple default"); 1047 checkValue(res, R.configVarying.bag, 1048 R.styleable.TestConfig, new String[]{"bag default"}); 1049 1050 config = makeClassicConfig(); 1051 config.setProperty(Properties.ORIENTATION, 1052 Configuration.ORIENTATION_SQUARE); 1053 config.setProperty(Properties.DENSITY, 32); 1054 config.setProperty(Properties.TOUCHSCREEN, 1055 Configuration.TOUCHSCREEN_STYLUS); 1056 res = config.getResources(); 1057 checkValue(res, R.configVarying.simple, "simple square 32dpi"); 1058 checkValue(res, R.configVarying.bag, 1059 R.styleable.TestConfig, new String[]{"bag square 32dpi"}); 1060 1061 config = makeClassicConfig(); 1062 config.setProperty(Properties.DENSITY, 32); 1063 config.setProperty(Properties.TOUCHSCREEN, 1064 Configuration.TOUCHSCREEN_STYLUS); 1065 config.setProperty(Properties.KEYBOARDHIDDEN, 1066 Configuration.KEYBOARDHIDDEN_NO); 1067 res = config.getResources(); 1068 checkValue(res, R.configVarying.simple, "simple 32dpi stylus"); 1069 checkValue(res, R.configVarying.bag, 1070 R.styleable.TestConfig, new String[]{"bag 32dpi stylus"}); 1071 1072 config = makeClassicConfig(); 1073 config.setProperty(Properties.TOUCHSCREEN, 1074 Configuration.TOUCHSCREEN_STYLUS); 1075 config.setProperty(Properties.KEYBOARDHIDDEN, 1076 Configuration.KEYBOARDHIDDEN_NO); 1077 config.setProperty(Properties.KEYBOARD, Configuration.KEYBOARD_12KEY); 1078 res = config.getResources(); 1079 checkValue(res, R.configVarying.simple, "simple stylus keysexposed"); 1080 checkValue(res, R.configVarying.bag, 1081 R.styleable.TestConfig, new String[]{"bag stylus keysexposed"}); 1082 1083 config = makeClassicConfig(); 1084 config.setProperty(Properties.KEYBOARDHIDDEN, 1085 Configuration.KEYBOARDHIDDEN_NO); 1086 config.setProperty(Properties.KEYBOARD, Configuration.KEYBOARD_12KEY); 1087 config.setProperty(Properties.NAVIGATION, 1088 Configuration.NAVIGATION_DPAD); 1089 res = config.getResources(); 1090 checkValue(res, R.configVarying.simple, "simple keysexposed 12key"); 1091 checkValue(res, R.configVarying.bag, 1092 R.styleable.TestConfig, new String[]{"bag keysexposed 12key"}); 1093 1094 config = makeClassicConfig(); 1095 config.setProperty(Properties.KEYBOARD, Configuration.KEYBOARD_12KEY); 1096 config.setProperty(Properties.NAVIGATION, 1097 Configuration.NAVIGATION_DPAD); 1098 config.setProperty(Properties.HEIGHT, 63); 1099 config.setProperty(Properties.WIDTH, 57); 1100 res = config.getResources(); 1101 checkValue(res, R.configVarying.simple, "simple 12key dpad"); 1102 checkValue(res, R.configVarying.bag, 1103 R.styleable.TestConfig, new String[]{"bag 12key dpad"}); 1104 1105 config = makeClassicConfig(); 1106 config.setProperty(Properties.NAVIGATION, 1107 Configuration.NAVIGATION_DPAD); 1108 config.setProperty(Properties.HEIGHT, 640); 1109 config.setProperty(Properties.WIDTH, 400); 1110 res = config.getResources(); 1111 checkValue(res, R.configVarying.simple, "simple dpad 63x57"); 1112 checkValue(res, R.configVarying.bag, 1113 R.styleable.TestConfig, new String[]{"bag dpad 63x57"}); 1114 } 1115 1116 @MediumTest 1117 public void testVersions() { 1118 // Check that we get the most recent resources that are <= our 1119 // current version. Note the special version adjustment, so that 1120 // during development the resource version is incremented to the 1121 // next one. 1122 int vers = android.os.Build.VERSION.SDK_INT; 1123 if (!"REL".equals(android.os.Build.VERSION.CODENAME)) { 1124 vers++; 1125 } 1126 String expected = "v" + vers + "cur"; 1127 assertEquals(expected, mContext.getResources().getString(R.string.version_cur)); 1128 assertEquals("base", mContext.getResources().getString(R.string.version_old)); 1129 assertEquals("v3", mContext.getResources().getString(R.string.version_v3)); 1130 } 1131 } 1132