1 /* 2 * Copyright (C) 2006 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 android.content.pm.ActivityInfo; 20 import android.content.res.Configuration; 21 import android.os.LocaleList; 22 import android.os.Parcel; 23 import android.test.AndroidTestCase; 24 import android.view.View; 25 26 import java.util.Locale; 27 28 public class ConfigurationTest extends AndroidTestCase { 29 30 private Configuration mConfigDefault; 31 private Configuration mConfig; 32 33 @Override 34 protected void setUp() throws Exception { 35 super.setUp(); 36 mConfigDefault = new Configuration(); 37 mConfigDefault.setToDefaults(); 38 makeConfiguration(); 39 } 40 41 private void makeConfiguration() { 42 mConfig = new Configuration(); 43 mConfig.fontScale = 2; 44 mConfig.mcc = mConfig.mnc = 1; 45 mConfig.setLocale(Locale.getDefault()); 46 mConfig.touchscreen = Configuration.TOUCHSCREEN_NOTOUCH; 47 mConfig.keyboard = Configuration.KEYBOARD_NOKEYS; 48 mConfig.keyboardHidden = Configuration.KEYBOARDHIDDEN_NO; 49 mConfig.navigation = Configuration.NAVIGATION_NONAV; 50 mConfig.orientation = Configuration.ORIENTATION_PORTRAIT; 51 } 52 53 public void testConstructor() { 54 new Configuration(); 55 new Configuration(mConfigDefault); 56 } 57 58 public void testCompareTo() { 59 final Configuration cfg1 = new Configuration(); 60 final Configuration cfg2 = new Configuration(); 61 assertEquals(0, cfg1.compareTo(cfg2)); 62 63 cfg1.colorMode = 2; 64 cfg2.colorMode = 3; 65 assertEquals(-1, cfg1.compareTo(cfg2)); 66 cfg1.colorMode = 3; 67 cfg2.colorMode = 2; 68 assertEquals(1, cfg1.compareTo(cfg2)); 69 70 cfg1.orientation = 2; 71 cfg2.orientation = 3; 72 assertEquals(-1, cfg1.compareTo(cfg2)); 73 cfg1.orientation = 3; 74 cfg2.orientation = 2; 75 assertEquals(1, cfg1.compareTo(cfg2)); 76 77 cfg1.navigation = 2; 78 cfg2.navigation = 3; 79 assertEquals(-1, cfg1.compareTo(cfg2)); 80 cfg1.navigation = 3; 81 cfg2.navigation = 2; 82 assertEquals(1, cfg1.compareTo(cfg2)); 83 84 cfg1.keyboardHidden = 2; 85 cfg2.keyboardHidden = 3; 86 assertEquals(-1, cfg1.compareTo(cfg2)); 87 cfg1.keyboardHidden = 3; 88 cfg2.keyboardHidden = 2; 89 assertEquals(1, cfg1.compareTo(cfg2)); 90 91 cfg1.keyboard = 2; 92 cfg2.keyboard = 3; 93 assertEquals(-1, cfg1.compareTo(cfg2)); 94 cfg1.keyboard = 3; 95 cfg2.keyboard = 2; 96 assertEquals(1, cfg1.compareTo(cfg2)); 97 98 cfg1.touchscreen = 2; 99 cfg2.touchscreen = 3; 100 assertEquals(-1, cfg1.compareTo(cfg2)); 101 cfg1.touchscreen = 3; 102 cfg2.touchscreen = 2; 103 assertEquals(1, cfg1.compareTo(cfg2)); 104 105 cfg1.setLocales(LocaleList.forLanguageTags("fr")); 106 cfg2.setLocales(LocaleList.forLanguageTags("fr,en")); 107 assertTrue(cfg1.compareTo(cfg2) < 0); 108 cfg1.setLocales(LocaleList.forLanguageTags("fr,en")); 109 cfg2.setLocales(LocaleList.forLanguageTags("fr")); 110 assertTrue(cfg1.compareTo(cfg2) > 0); 111 112 cfg1.setLocales(LocaleList.forLanguageTags("fr,en")); 113 cfg2.setLocales(LocaleList.forLanguageTags("fr,en-US")); 114 assertTrue(cfg1.compareTo(cfg2) < 0); 115 cfg1.setLocales(LocaleList.forLanguageTags("fr,en-US")); 116 cfg2.setLocales(LocaleList.forLanguageTags("fr,en")); 117 assertTrue(cfg1.compareTo(cfg2) > 0); 118 119 cfg1.locale = Locale.forLanguageTag("en"); 120 cfg2.locale = Locale.forLanguageTag("en-Shaw"); 121 assertTrue(cfg1.compareTo(cfg2) < 0); 122 cfg1.locale = Locale.forLanguageTag("en-Shaw"); 123 cfg2.locale = Locale.forLanguageTag("en"); 124 assertTrue(cfg1.compareTo(cfg2) > 0); 125 126 cfg1.locale = new Locale("", "", "2"); 127 cfg2.locale = new Locale("", "", "3"); 128 assertEquals(-1, cfg1.compareTo(cfg2)); 129 cfg1.locale = new Locale("", "", "3"); 130 cfg2.locale = new Locale("", "", "2"); 131 assertEquals(1, cfg1.compareTo(cfg2)); 132 133 cfg1.locale = new Locale("", "2", ""); 134 cfg2.locale = new Locale("", "3", ""); 135 assertEquals(-1, cfg1.compareTo(cfg2)); 136 cfg1.locale = new Locale("", "3", ""); 137 cfg2.locale = new Locale("", "2", ""); 138 assertEquals(1, cfg1.compareTo(cfg2)); 139 140 cfg1.locale = new Locale("2", "", ""); 141 cfg2.locale = new Locale("3", "", ""); 142 assertEquals(-1, cfg1.compareTo(cfg2)); 143 cfg1.locale = new Locale("3", "", ""); 144 cfg2.locale = new Locale("2", "", ""); 145 assertEquals(1, cfg1.compareTo(cfg2)); 146 147 cfg1.locale = new Locale(""); 148 cfg2.locale = null; 149 assertTrue(cfg1.compareTo(cfg2) < 0); 150 cfg1.locale = null; 151 cfg2.locale = new Locale(""); 152 assertTrue(cfg1.compareTo(cfg2) > 0); 153 154 cfg1.mnc = 2; 155 cfg2.mnc = 3; 156 assertEquals(-1, cfg1.compareTo(cfg2)); 157 cfg1.mnc = 3; 158 cfg2.mnc = 2; 159 assertEquals(1, cfg1.compareTo(cfg2)); 160 161 cfg1.mcc = 2; 162 cfg2.mcc = 3; 163 assertEquals(-1, cfg1.compareTo(cfg2)); 164 cfg1.mcc = 3; 165 cfg2.mcc = 2; 166 assertEquals(1, cfg1.compareTo(cfg2)); 167 168 cfg1.fontScale = 2; 169 cfg2.fontScale = 3; 170 assertEquals(-1, cfg1.compareTo(cfg2)); 171 cfg1.fontScale = 3; 172 cfg2.fontScale = 2; 173 assertEquals(1, cfg1.compareTo(cfg2)); 174 } 175 176 public void testDescribeContents() { 177 assertEquals(0, mConfigDefault.describeContents()); 178 } 179 180 private static void doConfigCompare(int expectedFlags, Configuration c1, Configuration c2) { 181 assertEquals(expectedFlags, c1.diff(c2)); 182 Configuration tmpc1 = new Configuration(c1); 183 assertEquals(expectedFlags, tmpc1.updateFrom(c2)); 184 assertEquals(0, tmpc1.diff(c2)); 185 } 186 187 public void testDiff() { 188 Configuration config = new Configuration(); 189 config.mcc = 1; 190 doConfigCompare(ActivityInfo.CONFIG_MCC, mConfigDefault, config); 191 config.mnc = 1; 192 doConfigCompare(ActivityInfo.CONFIG_MCC 193 | ActivityInfo.CONFIG_MNC, mConfigDefault, config); 194 config.locale = Locale.getDefault(); 195 config.setLayoutDirection(config.locale); 196 doConfigCompare(ActivityInfo.CONFIG_MCC 197 | ActivityInfo.CONFIG_MNC 198 | ActivityInfo.CONFIG_LOCALE 199 | ActivityInfo.CONFIG_LAYOUT_DIRECTION, mConfigDefault, config); 200 config.setLocales(LocaleList.forLanguageTags("fr,en")); 201 doConfigCompare(ActivityInfo.CONFIG_MCC 202 | ActivityInfo.CONFIG_MNC 203 | ActivityInfo.CONFIG_LOCALE 204 | ActivityInfo.CONFIG_LAYOUT_DIRECTION, mConfigDefault, config); 205 config.screenLayout = 1; 206 doConfigCompare(ActivityInfo.CONFIG_MCC 207 | ActivityInfo.CONFIG_MNC 208 | ActivityInfo.CONFIG_LOCALE 209 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 210 | ActivityInfo.CONFIG_SCREEN_LAYOUT, mConfigDefault, config); 211 config.touchscreen = 1; 212 doConfigCompare(ActivityInfo.CONFIG_MCC 213 | ActivityInfo.CONFIG_MNC 214 | ActivityInfo.CONFIG_LOCALE 215 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 216 | ActivityInfo.CONFIG_SCREEN_LAYOUT 217 | ActivityInfo.CONFIG_TOUCHSCREEN, mConfigDefault, config); 218 config.keyboard = 1; 219 doConfigCompare(ActivityInfo.CONFIG_MCC 220 | ActivityInfo.CONFIG_MNC 221 | ActivityInfo.CONFIG_LOCALE 222 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 223 | ActivityInfo.CONFIG_SCREEN_LAYOUT 224 | ActivityInfo.CONFIG_TOUCHSCREEN 225 | ActivityInfo.CONFIG_KEYBOARD, mConfigDefault, config); 226 config.keyboardHidden = 1; 227 doConfigCompare(ActivityInfo.CONFIG_MCC 228 | ActivityInfo.CONFIG_MNC 229 | ActivityInfo.CONFIG_LOCALE 230 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 231 | ActivityInfo.CONFIG_SCREEN_LAYOUT 232 | ActivityInfo.CONFIG_TOUCHSCREEN 233 | ActivityInfo.CONFIG_KEYBOARD 234 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN, mConfigDefault, config); 235 config.keyboardHidden = 0; 236 config.hardKeyboardHidden = 1; 237 doConfigCompare(ActivityInfo.CONFIG_MCC 238 | ActivityInfo.CONFIG_MNC 239 | ActivityInfo.CONFIG_LOCALE 240 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 241 | ActivityInfo.CONFIG_SCREEN_LAYOUT 242 | ActivityInfo.CONFIG_TOUCHSCREEN 243 | ActivityInfo.CONFIG_KEYBOARD 244 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN, mConfigDefault, config); 245 config.hardKeyboardHidden = 0; 246 config.navigationHidden = 1; 247 doConfigCompare(ActivityInfo.CONFIG_MCC 248 | ActivityInfo.CONFIG_MNC 249 | ActivityInfo.CONFIG_LOCALE 250 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 251 | ActivityInfo.CONFIG_SCREEN_LAYOUT 252 | ActivityInfo.CONFIG_TOUCHSCREEN 253 | ActivityInfo.CONFIG_KEYBOARD 254 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN, mConfigDefault, config); 255 config.navigation = 1; 256 doConfigCompare(ActivityInfo.CONFIG_MCC 257 | ActivityInfo.CONFIG_MNC 258 | ActivityInfo.CONFIG_LOCALE 259 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 260 | ActivityInfo.CONFIG_SCREEN_LAYOUT 261 | ActivityInfo.CONFIG_TOUCHSCREEN 262 | ActivityInfo.CONFIG_KEYBOARD 263 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 264 | ActivityInfo.CONFIG_NAVIGATION, mConfigDefault, config); 265 config.orientation = 1; 266 doConfigCompare(ActivityInfo.CONFIG_MCC 267 | ActivityInfo.CONFIG_MNC 268 | ActivityInfo.CONFIG_LOCALE 269 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 270 | ActivityInfo.CONFIG_SCREEN_LAYOUT 271 | ActivityInfo.CONFIG_TOUCHSCREEN 272 | ActivityInfo.CONFIG_KEYBOARD 273 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 274 | ActivityInfo.CONFIG_NAVIGATION 275 | ActivityInfo.CONFIG_ORIENTATION, mConfigDefault, config); 276 config.uiMode = 1; 277 doConfigCompare(ActivityInfo.CONFIG_MCC 278 | ActivityInfo.CONFIG_MNC 279 | ActivityInfo.CONFIG_LOCALE 280 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 281 | ActivityInfo.CONFIG_SCREEN_LAYOUT 282 | ActivityInfo.CONFIG_TOUCHSCREEN 283 | ActivityInfo.CONFIG_KEYBOARD 284 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 285 | ActivityInfo.CONFIG_NAVIGATION 286 | ActivityInfo.CONFIG_ORIENTATION 287 | ActivityInfo.CONFIG_UI_MODE, mConfigDefault, config); 288 config.fontScale = 2; 289 doConfigCompare(ActivityInfo.CONFIG_MCC 290 | ActivityInfo.CONFIG_MNC 291 | ActivityInfo.CONFIG_LOCALE 292 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 293 | ActivityInfo.CONFIG_SCREEN_LAYOUT 294 | ActivityInfo.CONFIG_TOUCHSCREEN 295 | ActivityInfo.CONFIG_KEYBOARD 296 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 297 | ActivityInfo.CONFIG_NAVIGATION 298 | ActivityInfo.CONFIG_ORIENTATION 299 | ActivityInfo.CONFIG_UI_MODE 300 | ActivityInfo.CONFIG_FONT_SCALE, mConfigDefault, config); 301 config.colorMode = 2; 302 doConfigCompare(ActivityInfo.CONFIG_MCC 303 | ActivityInfo.CONFIG_MNC 304 | ActivityInfo.CONFIG_LOCALE 305 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 306 | ActivityInfo.CONFIG_SCREEN_LAYOUT 307 | ActivityInfo.CONFIG_TOUCHSCREEN 308 | ActivityInfo.CONFIG_KEYBOARD 309 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 310 | ActivityInfo.CONFIG_NAVIGATION 311 | ActivityInfo.CONFIG_ORIENTATION 312 | ActivityInfo.CONFIG_UI_MODE 313 | ActivityInfo.CONFIG_FONT_SCALE 314 | ActivityInfo.CONFIG_COLOR_MODE, mConfigDefault, config); 315 } 316 317 public void testEquals() { 318 assertFalse(mConfigDefault.equals(mConfig)); 319 assertFalse(mConfigDefault.equals(new Object())); 320 } 321 322 public void testHashCode() { 323 assertFalse(mConfigDefault.hashCode() == mConfig.hashCode()); 324 } 325 326 public void testNeedNewResources() { 327 assertTrue(Configuration.needNewResources(ActivityInfo.CONFIG_MCC, 328 ActivityInfo.CONFIG_MCC)); 329 assertFalse(Configuration.needNewResources(ActivityInfo.CONFIG_MNC, 330 ActivityInfo.CONFIG_MCC)); 331 assertTrue(Configuration.needNewResources( 332 ActivityInfo.CONFIG_MNC|ActivityInfo.CONFIG_FONT_SCALE, 333 ActivityInfo.CONFIG_MCC)); 334 } 335 336 public void testSetToDefaults() { 337 final Configuration config = new Configuration(mConfig); 338 assertFalse(config.equals(mConfigDefault)); 339 340 config.setToDefaults(); 341 assertTrue(config.equals(mConfigDefault)); 342 343 assertEquals(1.0f, config.fontScale); 344 assertEquals(0, config.mcc); 345 assertEquals(0, config.mnc); 346 assertTrue(config.getLocales().isEmpty()); 347 assertEquals(null, config.locale); 348 assertFalse(config.userSetLocale); 349 assertEquals(Configuration.TOUCHSCREEN_UNDEFINED, config.touchscreen); 350 assertEquals(Configuration.KEYBOARD_UNDEFINED, config.keyboard); 351 assertEquals(Configuration.KEYBOARDHIDDEN_UNDEFINED, config.keyboardHidden); 352 assertEquals(Configuration.HARDKEYBOARDHIDDEN_UNDEFINED, config.hardKeyboardHidden); 353 assertEquals(Configuration.NAVIGATION_UNDEFINED, config.navigation); 354 assertEquals(Configuration.NAVIGATIONHIDDEN_UNDEFINED, config.navigationHidden); 355 assertEquals(Configuration.ORIENTATION_UNDEFINED, config.orientation); 356 assertEquals(Configuration.SCREENLAYOUT_UNDEFINED, config.screenLayout); 357 assertEquals(Configuration.UI_MODE_TYPE_UNDEFINED, config.uiMode); 358 assertEquals(Configuration.SCREEN_WIDTH_DP_UNDEFINED, config.screenWidthDp); 359 assertEquals(Configuration.SCREEN_WIDTH_DP_UNDEFINED, config.compatScreenWidthDp); 360 assertEquals(Configuration.SCREEN_HEIGHT_DP_UNDEFINED, config.screenHeightDp); 361 assertEquals(Configuration.SCREEN_HEIGHT_DP_UNDEFINED, config.compatScreenHeightDp); 362 assertEquals(Configuration.SMALLEST_SCREEN_WIDTH_DP_UNDEFINED, 363 config.smallestScreenWidthDp); 364 assertEquals(Configuration.DENSITY_DPI_UNDEFINED, config.densityDpi); 365 assertEquals(Configuration.COLOR_MODE_UNDEFINED, config.colorMode); 366 } 367 368 public void testUnset() { 369 Configuration config = new Configuration(); 370 assertEquals(0.0f, config.fontScale); 371 assertEquals(0, config.mcc); 372 assertEquals(0, config.mnc); 373 assertTrue(config.getLocales().isEmpty()); 374 assertEquals(null, config.locale); 375 assertFalse(config.userSetLocale); 376 assertEquals(Configuration.TOUCHSCREEN_UNDEFINED, config.touchscreen); 377 assertEquals(Configuration.KEYBOARD_UNDEFINED, config.keyboard); 378 assertEquals(Configuration.KEYBOARDHIDDEN_UNDEFINED, config.keyboardHidden); 379 assertEquals(Configuration.HARDKEYBOARDHIDDEN_UNDEFINED, config.hardKeyboardHidden); 380 assertEquals(Configuration.NAVIGATION_UNDEFINED, config.navigation); 381 assertEquals(Configuration.NAVIGATIONHIDDEN_UNDEFINED, config.navigationHidden); 382 assertEquals(Configuration.ORIENTATION_UNDEFINED, config.orientation); 383 assertEquals(Configuration.SCREENLAYOUT_UNDEFINED, config.screenLayout); 384 assertEquals(Configuration.UI_MODE_TYPE_UNDEFINED, config.uiMode); 385 assertEquals(Configuration.SCREEN_WIDTH_DP_UNDEFINED, config.screenWidthDp); 386 assertEquals(Configuration.SCREEN_WIDTH_DP_UNDEFINED, config.compatScreenWidthDp); 387 assertEquals(Configuration.SCREEN_HEIGHT_DP_UNDEFINED, config.screenHeightDp); 388 assertEquals(Configuration.SCREEN_HEIGHT_DP_UNDEFINED, config.compatScreenHeightDp); 389 assertEquals(Configuration.SMALLEST_SCREEN_WIDTH_DP_UNDEFINED, 390 config.smallestScreenWidthDp); 391 assertEquals(Configuration.DENSITY_DPI_UNDEFINED, config.densityDpi); 392 assertEquals(Configuration.COLOR_MODE_UNDEFINED, config.colorMode); 393 } 394 395 public void testToString() { 396 assertNotNull(mConfigDefault.toString()); 397 } 398 399 public void testWriteToParcel() { 400 assertWriteToParcel(createConfig((Locale) null)); 401 assertWriteToParcel(createConfig(new Locale(""))); 402 assertWriteToParcel(createConfig(Locale.JAPAN)); 403 assertWriteToParcel(createConfig(Locale.forLanguageTag("en-Shaw"))); 404 assertWriteToParcel(createConfig(LocaleList.forLanguageTags("fr,en-US"))); 405 } 406 407 public void testSetLocale() { 408 Configuration config = new Configuration(); 409 410 config.setLocale(null); 411 assertNull(config.locale); 412 assertTrue(config.getLocales().isEmpty()); 413 414 config.setLocale(Locale.getDefault()); 415 assertEquals(Locale.getDefault(), config.locale); 416 assertEquals(new LocaleList(Locale.getDefault()), config.getLocales()); 417 418 config.setLocale(Locale.ENGLISH); 419 assertEquals(Locale.ENGLISH, config.locale); 420 assertEquals(new LocaleList(Locale.ENGLISH), config.getLocales()); 421 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 422 423 config.setLocale(Locale.US); 424 assertEquals(Locale.US, config.locale); 425 assertEquals(new LocaleList(Locale.US), config.getLocales()); 426 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 427 428 final Locale arEGLocale = new Locale("ar", "EG"); 429 config.setLocale(arEGLocale); 430 assertEquals(arEGLocale, config.locale); 431 assertEquals(new LocaleList(arEGLocale), config.getLocales()); 432 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 433 434 final Locale faIRLocale = new Locale("fa", "IR"); 435 config.setLocale(faIRLocale); 436 assertEquals(faIRLocale, config.locale); 437 assertEquals(new LocaleList(faIRLocale), config.getLocales()); 438 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 439 440 final Locale iwILLocale = new Locale("iw", "IL"); 441 config.setLocale(iwILLocale); 442 assertEquals(iwILLocale, config.locale); 443 assertEquals(new LocaleList(iwILLocale), config.getLocales()); 444 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 445 446 final Locale urPKLocale = new Locale("ur", "PK"); 447 config.setLocale(urPKLocale); 448 assertEquals(urPKLocale, config.locale); 449 assertEquals(new LocaleList(urPKLocale), config.getLocales()); 450 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 451 } 452 453 public void testSetGetLayoutDirection() { 454 Configuration config = new Configuration(); 455 456 config.setLayoutDirection(Locale.ENGLISH); 457 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 458 459 config.setLayoutDirection(Locale.US); 460 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 461 462 final Locale arEGLocale = new Locale("ar", "EG"); 463 config.setLayoutDirection(arEGLocale); 464 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 465 466 final Locale faIRLocale = new Locale("fa", "IR"); 467 config.setLayoutDirection(faIRLocale); 468 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 469 470 final Locale iwILLocale = new Locale("iw", "IL"); 471 config.setLayoutDirection(iwILLocale); 472 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 473 474 final Locale urPKLocale = new Locale("ur", "PK"); 475 config.setLayoutDirection(urPKLocale); 476 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 477 } 478 479 public void testIsScreenRound() { 480 Configuration config = new Configuration(); 481 assertFalse(config.isScreenRound()); 482 483 config.screenLayout |= Configuration.SCREENLAYOUT_ROUND_YES; 484 assertTrue(config.isScreenRound()); 485 } 486 487 public void testIsScreenHdr() { 488 Configuration config = new Configuration(); 489 assertFalse(config.isScreenHdr()); 490 491 config.colorMode |= Configuration.COLOR_MODE_HDR_YES; 492 assertTrue(config.isScreenHdr()); 493 } 494 495 public void testIsScreenWideColorGamut() { 496 Configuration config = new Configuration(); 497 assertFalse(config.isScreenWideColorGamut()); 498 499 config.colorMode |= Configuration.COLOR_MODE_WIDE_COLOR_GAMUT_YES; 500 assertTrue(config.isScreenWideColorGamut()); 501 } 502 503 public void testFixUpLocaleList() { 504 Configuration config = new Configuration(); 505 506 config.setLocales(LocaleList.forLanguageTags("fr")); 507 config.locale = null; 508 assertEquals(LocaleList.getEmptyLocaleList(), config.getLocales()); 509 510 config.setLocales(LocaleList.forLanguageTags("fr,en")); 511 config.locale = Locale.forLanguageTag("en"); 512 assertEquals(LocaleList.forLanguageTags("en"), config.getLocales()); 513 514 config.setLocales(LocaleList.forLanguageTags("fr,en")); 515 config.locale = Locale.forLanguageTag("fr"); 516 assertEquals(LocaleList.forLanguageTags("fr,en"), config.getLocales()); 517 } 518 519 public void testSetTo_nullLocale() { 520 Configuration config1 = new Configuration(); 521 Configuration config2 = new Configuration(); 522 assertEquals(null, config2.locale); 523 524 config1.setLocale(Locale.FRENCH); 525 config1.setTo(config2); 526 assertEquals(null, config1.locale); 527 } 528 529 public void testSetTo_localeFixUp() { 530 Configuration config1 = new Configuration(); 531 Configuration config2 = new Configuration(); 532 config2.locale = Locale.FRENCH; 533 534 config1.setTo(config2); 535 assertEquals(Locale.FRENCH, config1.locale); 536 assertEquals(new LocaleList(Locale.FRENCH), config1.getLocales()); 537 assertEquals(new LocaleList(Locale.FRENCH), config2.getLocales()); 538 } 539 540 public void testToString_localeFixUp() { 541 Configuration config1 = new Configuration(); 542 Configuration config2 = new Configuration(); 543 config1.setLocales(LocaleList.forLanguageTags("fr,en")); 544 config1.locale = Locale.forLanguageTag("en"); 545 config2.setLocales(LocaleList.forLanguageTags("en")); 546 547 assertEquals(config1.toString(), config2.toString()); 548 } 549 550 public void testUpdateFrom_localeFixUp() { 551 Configuration config1, config2; 552 int changed; 553 554 config1 = new Configuration(); 555 config2 = new Configuration(); 556 config1.locale = Locale.FRENCH; 557 changed = config1.updateFrom(config2); 558 assertEquals(0, changed); 559 assertEquals(Locale.FRENCH, config1.locale); 560 assertEquals(new LocaleList(Locale.FRENCH), config1.getLocales()); 561 562 config1 = new Configuration(); 563 config2 = new Configuration(); 564 config2.locale = Locale.FRENCH; 565 changed = config1.updateFrom(config2); 566 assertEquals(ActivityInfo.CONFIG_LOCALE | ActivityInfo.CONFIG_LAYOUT_DIRECTION, changed); 567 assertEquals(Locale.FRENCH, config1.locale); 568 assertEquals(new LocaleList(Locale.FRENCH), config1.getLocales()); 569 assertEquals(new LocaleList(Locale.FRENCH), config2.getLocales()); 570 571 config1 = new Configuration(); 572 config2 = new Configuration(); 573 config1.setLocales(LocaleList.forLanguageTags("en,fr")); 574 config1.locale = Locale.forLanguageTag("fr"); 575 config2.setLocales(LocaleList.forLanguageTags("en,de")); 576 config2.locale = Locale.forLanguageTag("fr"); 577 changed = config1.updateFrom(config2); 578 assertEquals(0, changed); 579 assertEquals(Locale.forLanguageTag("fr"), config1.locale); 580 assertEquals(LocaleList.forLanguageTags("fr"), config1.getLocales()); 581 assertEquals(LocaleList.forLanguageTags("fr"), config2.getLocales()); 582 } 583 584 public void testUpdateFrom_layoutDirection() { 585 Configuration config1, config2; 586 int changed; 587 588 config1 = new Configuration(); 589 config2 = new Configuration(); 590 config1.setLocales(LocaleList.forLanguageTags("fr,en")); 591 config2.setLocales(LocaleList.forLanguageTags("de,en")); 592 changed = config1.updateFrom(config2); 593 assertTrue((changed & ActivityInfo.CONFIG_LAYOUT_DIRECTION) != 0); 594 595 config1 = new Configuration(); 596 config2 = new Configuration(); 597 config1.setLocales(LocaleList.forLanguageTags("fr,en")); 598 config2.setLocales(LocaleList.forLanguageTags("fr,de")); 599 changed = config1.updateFrom(config2); 600 assertEquals(0, changed & ActivityInfo.CONFIG_LAYOUT_DIRECTION); 601 } 602 603 public void testDiff_localeFixUp() { 604 Configuration config1 = new Configuration(); 605 Configuration config2 = new Configuration(); 606 config1.setLocales(LocaleList.forLanguageTags("en,fr")); 607 config1.locale = Locale.forLanguageTag("fr"); 608 config2.setLocales(LocaleList.forLanguageTags("en,de")); 609 config2.locale = Locale.forLanguageTag("fr"); 610 611 int diff = config1.diff(config2); 612 assertEquals(0, diff); 613 } 614 615 public void testCompareTo_localeFixUp() { 616 Configuration config1 = new Configuration(); 617 Configuration config2 = new Configuration(); 618 config1.setLocales(LocaleList.forLanguageTags("en,fr")); 619 config2.setLocales(LocaleList.forLanguageTags("en,fr")); 620 assertEquals(0, config1.compareTo(config2)); 621 config1.locale = new Locale("2"); 622 config2.locale = new Locale("3"); 623 assertEquals(-1, config1.compareTo(config2)); 624 } 625 626 public void testSetLocales_null() { 627 Configuration config = new Configuration(); 628 config.setLocales(null); 629 assertNull(config.locale); 630 assertNotNull(config.getLocales()); 631 assertTrue(config.getLocales().isEmpty()); 632 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 633 } 634 635 public void testSetLocales_emptyList() { 636 Configuration config = new Configuration(); 637 config.setLocales(LocaleList.getEmptyLocaleList()); 638 assertNull(config.locale); 639 assertNotNull(config.getLocales()); 640 assertTrue(config.getLocales().isEmpty()); 641 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 642 } 643 644 public void testSetLocales_oneLtr() { 645 Configuration config = new Configuration(); 646 Locale loc = Locale.forLanguageTag("en"); 647 LocaleList ll = new LocaleList(loc); 648 config.setLocales(ll); 649 assertEquals(loc, config.locale); 650 assertEquals(ll, config.getLocales()); 651 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 652 } 653 654 public void testSetLocales_oneRtl() { 655 Configuration config = new Configuration(); 656 Locale loc = Locale.forLanguageTag("az-Arab"); 657 LocaleList ll = new LocaleList(loc); 658 config.setLocales(ll); 659 assertEquals(loc, config.locale); 660 assertEquals(ll, config.getLocales()); 661 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 662 } 663 664 public void testSetLocales_twoLocales() { 665 Configuration config = new Configuration(); 666 Locale rtlLoc = Locale.forLanguageTag("az-Arab"); 667 Locale ltrLoc = Locale.forLanguageTag("en"); 668 LocaleList ll = LocaleList.forLanguageTags("az-Arab,en"); 669 config.setLocales(ll); 670 assertEquals(rtlLoc, config.locale); 671 assertEquals(ll, config.getLocales()); 672 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 673 } 674 675 public void testSetLocales_overridesLocale() { 676 Configuration config = new Configuration(); 677 config.locale = Locale.forLanguageTag("en"); 678 LocaleList ll = LocaleList.forLanguageTags("az-Arab,en"); 679 config.setLocales(ll); 680 681 assertEquals(Locale.forLanguageTag("az-Arab"), config.locale); 682 assertEquals(ll, config.getLocales()); 683 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 684 } 685 686 public void testSetLocales_overridesSetLocale() { 687 Configuration config = new Configuration(); 688 config.setLocale(Locale.forLanguageTag("en")); 689 LocaleList ll = LocaleList.forLanguageTags("az-Arab,en"); 690 config.setLocales(ll); 691 692 assertEquals(Locale.forLanguageTag("az-Arab"), config.locale); 693 assertEquals(ll, config.getLocales()); 694 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 695 } 696 697 public void testSetLocale_overridesSetLocales() { 698 Configuration config = new Configuration(); 699 config.setLocales(LocaleList.forLanguageTags("az-Arab,en")); 700 config.setLocale(Locale.ENGLISH); 701 702 assertEquals(Locale.ENGLISH, config.locale); 703 assertEquals(new LocaleList(Locale.ENGLISH), config.getLocales()); 704 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 705 } 706 707 private Configuration createConfig(LocaleList list) { 708 Configuration config = createConfig(); 709 config.setLocales(list); 710 return config; 711 } 712 713 private Configuration createConfig(Locale locale) { 714 Configuration config = createConfig(); 715 config.locale = locale; 716 return config; 717 } 718 719 private Configuration createConfig() { 720 Configuration config = new Configuration(); 721 config.fontScale = 13.37f; 722 config.mcc = 0; 723 config.mnc = 1; 724 config.touchscreen = Configuration.TOUCHSCREEN_STYLUS; 725 config.keyboard = Configuration.KEYBOARD_UNDEFINED; 726 config.keyboardHidden = Configuration.KEYBOARDHIDDEN_YES; 727 config.hardKeyboardHidden = Configuration.KEYBOARDHIDDEN_UNDEFINED; 728 config.navigation = Configuration.NAVIGATION_DPAD; 729 config.navigationHidden = Configuration.NAVIGATIONHIDDEN_UNDEFINED; 730 config.orientation = Configuration.ORIENTATION_PORTRAIT; 731 config.screenLayout = Configuration.SCREENLAYOUT_LONG_UNDEFINED; 732 return config; 733 } 734 735 private void assertWriteToParcel(Configuration config) { 736 final Parcel parcel = Parcel.obtain(); 737 try { 738 config.writeToParcel(parcel, 0); 739 parcel.setDataPosition(0); 740 Configuration readConf = new Configuration(); 741 readConf.readFromParcel(parcel); 742 assertEquals(config, readConf); 743 } finally { 744 parcel.recycle(); 745 } 746 } 747 } 748