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 static junit.framework.TestCase.assertEquals; 20 import static junit.framework.TestCase.assertFalse; 21 import static junit.framework.TestCase.assertNotNull; 22 import static junit.framework.TestCase.assertNull; 23 import static junit.framework.TestCase.assertTrue; 24 25 import android.content.pm.ActivityInfo; 26 import android.content.res.Configuration; 27 import android.os.LocaleList; 28 import android.os.Parcel; 29 import android.platform.test.annotations.AppModeSdkSandbox; 30 import android.platform.test.ravenwood.RavenwoodRule; 31 import android.view.View; 32 33 import androidx.test.ext.junit.runners.AndroidJUnit4; 34 35 import org.junit.Before; 36 import org.junit.Rule; 37 import org.junit.Test; 38 import org.junit.runner.RunWith; 39 40 import java.util.Locale; 41 42 @AppModeSdkSandbox(reason = "Allow test in the SDK sandbox (does not prevent other modes).") 43 @RunWith(AndroidJUnit4.class) 44 public class ConfigurationTest { 45 @Rule 46 public final RavenwoodRule mRavenwoodRule = new RavenwoodRule.Builder().build(); 47 48 private Configuration mConfigDefault; 49 private Configuration mConfig; 50 51 @Before setUp()52 public void setUp() throws Exception { 53 mConfigDefault = new Configuration(); 54 mConfigDefault.setToDefaults(); 55 makeConfiguration(); 56 } 57 makeConfiguration()58 private void makeConfiguration() { 59 mConfig = new Configuration(); 60 mConfig.fontScale = 2; 61 mConfig.mcc = mConfig.mnc = 1; 62 mConfig.setLocale(Locale.getDefault()); 63 mConfig.touchscreen = Configuration.TOUCHSCREEN_NOTOUCH; 64 mConfig.keyboard = Configuration.KEYBOARD_NOKEYS; 65 mConfig.keyboardHidden = Configuration.KEYBOARDHIDDEN_NO; 66 mConfig.navigation = Configuration.NAVIGATION_NONAV; 67 mConfig.orientation = Configuration.ORIENTATION_PORTRAIT; 68 mConfig.fontWeightAdjustment = 300; 69 } 70 71 @Test testConstructor()72 public void testConstructor() { 73 new Configuration(); 74 new Configuration(mConfigDefault); 75 } 76 77 @Test testCompareTo()78 public void testCompareTo() { 79 final Configuration cfg1 = new Configuration(); 80 final Configuration cfg2 = new Configuration(); 81 assertEquals(0, cfg1.compareTo(cfg2)); 82 83 cfg1.fontWeightAdjustment = 1; 84 cfg2.fontWeightAdjustment = 2; 85 assertEquals(-1, cfg1.compareTo(cfg2)); 86 cfg1.fontWeightAdjustment = 2; 87 cfg2.fontWeightAdjustment = 1; 88 assertEquals(1, cfg1.compareTo(cfg2)); 89 90 cfg1.colorMode = 2; 91 cfg2.colorMode = 3; 92 assertEquals(-1, cfg1.compareTo(cfg2)); 93 cfg1.colorMode = 3; 94 cfg2.colorMode = 2; 95 assertEquals(1, cfg1.compareTo(cfg2)); 96 97 cfg1.orientation = 2; 98 cfg2.orientation = 3; 99 assertEquals(-1, cfg1.compareTo(cfg2)); 100 cfg1.orientation = 3; 101 cfg2.orientation = 2; 102 assertEquals(1, cfg1.compareTo(cfg2)); 103 104 cfg1.navigation = 2; 105 cfg2.navigation = 3; 106 assertEquals(-1, cfg1.compareTo(cfg2)); 107 cfg1.navigation = 3; 108 cfg2.navigation = 2; 109 assertEquals(1, cfg1.compareTo(cfg2)); 110 111 cfg1.keyboardHidden = 2; 112 cfg2.keyboardHidden = 3; 113 assertEquals(-1, cfg1.compareTo(cfg2)); 114 cfg1.keyboardHidden = 3; 115 cfg2.keyboardHidden = 2; 116 assertEquals(1, cfg1.compareTo(cfg2)); 117 118 cfg1.keyboard = 2; 119 cfg2.keyboard = 3; 120 assertEquals(-1, cfg1.compareTo(cfg2)); 121 cfg1.keyboard = 3; 122 cfg2.keyboard = 2; 123 assertEquals(1, cfg1.compareTo(cfg2)); 124 125 cfg1.touchscreen = 2; 126 cfg2.touchscreen = 3; 127 assertEquals(-1, cfg1.compareTo(cfg2)); 128 cfg1.touchscreen = 3; 129 cfg2.touchscreen = 2; 130 assertEquals(1, cfg1.compareTo(cfg2)); 131 132 cfg1.setGrammaticalGender(Configuration.GRAMMATICAL_GENDER_FEMININE); 133 cfg2.setGrammaticalGender(Configuration.GRAMMATICAL_GENDER_MASCULINE); 134 assertEquals(-1, cfg1.compareTo(cfg2)); 135 assertEquals(1, cfg2.compareTo(cfg1)); 136 137 cfg1.setLocales(LocaleList.forLanguageTags("fr")); 138 cfg2.setLocales(LocaleList.forLanguageTags("fr,en")); 139 assertTrue(cfg1.compareTo(cfg2) < 0); 140 cfg1.setLocales(LocaleList.forLanguageTags("fr,en")); 141 cfg2.setLocales(LocaleList.forLanguageTags("fr")); 142 assertTrue(cfg1.compareTo(cfg2) > 0); 143 144 cfg1.setLocales(LocaleList.forLanguageTags("fr,en")); 145 cfg2.setLocales(LocaleList.forLanguageTags("fr,en-US")); 146 assertTrue(cfg1.compareTo(cfg2) < 0); 147 cfg1.setLocales(LocaleList.forLanguageTags("fr,en-US")); 148 cfg2.setLocales(LocaleList.forLanguageTags("fr,en")); 149 assertTrue(cfg1.compareTo(cfg2) > 0); 150 151 cfg1.locale = Locale.forLanguageTag("en"); 152 cfg2.locale = Locale.forLanguageTag("en-Shaw"); 153 assertTrue(cfg1.compareTo(cfg2) < 0); 154 cfg1.locale = Locale.forLanguageTag("en-Shaw"); 155 cfg2.locale = Locale.forLanguageTag("en"); 156 assertTrue(cfg1.compareTo(cfg2) > 0); 157 158 cfg1.locale = new Locale("", "", "2"); 159 cfg2.locale = new Locale("", "", "3"); 160 assertEquals(-1, cfg1.compareTo(cfg2)); 161 cfg1.locale = new Locale("", "", "3"); 162 cfg2.locale = new Locale("", "", "2"); 163 assertEquals(1, cfg1.compareTo(cfg2)); 164 165 cfg1.locale = new Locale("", "2", ""); 166 cfg2.locale = new Locale("", "3", ""); 167 assertEquals(-1, cfg1.compareTo(cfg2)); 168 cfg1.locale = new Locale("", "3", ""); 169 cfg2.locale = new Locale("", "2", ""); 170 assertEquals(1, cfg1.compareTo(cfg2)); 171 172 cfg1.locale = new Locale("2", "", ""); 173 cfg2.locale = new Locale("3", "", ""); 174 assertEquals(-1, cfg1.compareTo(cfg2)); 175 cfg1.locale = new Locale("3", "", ""); 176 cfg2.locale = new Locale("2", "", ""); 177 assertEquals(1, cfg1.compareTo(cfg2)); 178 179 cfg1.locale = new Locale(""); 180 cfg2.locale = null; 181 assertTrue(cfg1.compareTo(cfg2) < 0); 182 cfg1.locale = null; 183 cfg2.locale = new Locale(""); 184 assertTrue(cfg1.compareTo(cfg2) > 0); 185 186 cfg1.mnc = 2; 187 cfg2.mnc = 3; 188 assertEquals(-1, cfg1.compareTo(cfg2)); 189 cfg1.mnc = 3; 190 cfg2.mnc = 2; 191 assertEquals(1, cfg1.compareTo(cfg2)); 192 193 cfg1.mcc = 2; 194 cfg2.mcc = 3; 195 assertEquals(-1, cfg1.compareTo(cfg2)); 196 cfg1.mcc = 3; 197 cfg2.mcc = 2; 198 assertEquals(1, cfg1.compareTo(cfg2)); 199 200 cfg1.fontScale = 2; 201 cfg2.fontScale = 3; 202 assertEquals(-1, cfg1.compareTo(cfg2)); 203 cfg1.fontScale = 3; 204 cfg2.fontScale = 2; 205 assertEquals(1, cfg1.compareTo(cfg2)); 206 } 207 208 @Test testGenerateDiff()209 public void testGenerateDiff() { 210 Configuration cfg1 = new Configuration(); 211 Configuration cfg2 = new Configuration(); 212 213 cfg1.fontScale = 2; 214 cfg2.fontScale = 3; 215 216 cfg1.mcc = 2; 217 cfg2.mcc = 3; 218 219 cfg1.mnc = 2; 220 cfg2.mnc = 3; 221 222 cfg1.locale = new Locale("1", "2", "3"); 223 cfg1.locale = new Locale("3", "2", "1"); 224 225 cfg1.touchscreen = 2; 226 cfg2.touchscreen = 3; 227 228 cfg1.keyboard = 2; 229 cfg2.keyboard = 3; 230 231 cfg1.keyboardHidden = 2; 232 cfg2.keyboardHidden = 3; 233 234 cfg1.navigation = 2; 235 cfg2.navigation = 3; 236 237 cfg1.navigationHidden = 3; 238 cfg2.navigationHidden = 2; 239 240 cfg1.orientation = 3; 241 cfg2.orientation = 2; 242 243 cfg1.screenLayout = Configuration.SCREENLAYOUT_SIZE_NORMAL 244 | Configuration.SCREENLAYOUT_LAYOUTDIR_RTL 245 | Configuration.SCREENLAYOUT_LONG_NO 246 | Configuration.SCREENLAYOUT_ROUND_YES; 247 cfg2.screenLayout = Configuration.SCREENLAYOUT_SIZE_LARGE 248 | Configuration.SCREENLAYOUT_LAYOUTDIR_LTR 249 | Configuration.SCREENLAYOUT_LONG_YES 250 | Configuration.SCREENLAYOUT_ROUND_NO; 251 252 cfg1.colorMode = Configuration.COLOR_MODE_WIDE_COLOR_GAMUT_YES 253 | Configuration.COLOR_MODE_HDR_NO; 254 cfg2.colorMode = Configuration.COLOR_MODE_WIDE_COLOR_GAMUT_NO 255 | Configuration.COLOR_MODE_HDR_YES; 256 257 cfg1.uiMode = Configuration.UI_MODE_TYPE_WATCH 258 | Configuration.UI_MODE_NIGHT_NO; 259 cfg2.uiMode = Configuration.UI_MODE_TYPE_NORMAL 260 | Configuration.UI_MODE_NIGHT_YES; 261 262 cfg1.screenWidthDp = 500; 263 cfg2.screenWidthDp = 600; 264 265 cfg1.screenHeightDp = 920; 266 cfg2.screenHeightDp = 900; 267 268 cfg1.smallestScreenWidthDp = 500; 269 cfg2.smallestScreenWidthDp = 600; 270 271 cfg1.densityDpi = 200; 272 cfg2.densityDpi = 220; 273 274 cfg1.assetsSeq = 4; 275 cfg2.assetsSeq = 5; 276 277 cfg1.fontWeightAdjustment = 2; 278 cfg1.fontWeightAdjustment = 3; 279 280 Configuration delta = Configuration.generateDelta(cfg1, cfg2); 281 assertEquals(cfg2, delta); 282 283 delta = Configuration.generateDelta(cfg2, cfg1); 284 assertEquals(cfg1, delta); 285 286 delta = Configuration.generateDelta(cfg1, cfg1); 287 assertEquals(new Configuration(), delta); 288 } 289 290 @Test testDescribeContents()291 public void testDescribeContents() { 292 assertEquals(0, mConfigDefault.describeContents()); 293 } 294 doConfigCompare(int expectedFlags, Configuration c1, Configuration c2)295 private static void doConfigCompare(int expectedFlags, Configuration c1, Configuration c2) { 296 assertEquals(expectedFlags, c1.diff(c2)); 297 Configuration tmpc1 = new Configuration(c1); 298 assertEquals(expectedFlags, tmpc1.updateFrom(c2)); 299 assertEquals(0, tmpc1.diff(c2)); 300 } 301 302 @Test testDiff()303 public void testDiff() { 304 Configuration config = new Configuration(); 305 config.mcc = 1; 306 doConfigCompare(ActivityInfo.CONFIG_MCC, mConfigDefault, config); 307 config.mnc = 1; 308 doConfigCompare(ActivityInfo.CONFIG_MCC 309 | ActivityInfo.CONFIG_MNC, mConfigDefault, config); 310 config.locale = Locale.getDefault(); 311 config.setLayoutDirection(config.locale); 312 doConfigCompare(ActivityInfo.CONFIG_MCC 313 | ActivityInfo.CONFIG_MNC 314 | ActivityInfo.CONFIG_LOCALE 315 | ActivityInfo.CONFIG_LAYOUT_DIRECTION, mConfigDefault, config); 316 config.setLocales(LocaleList.forLanguageTags("fr,en")); 317 doConfigCompare(ActivityInfo.CONFIG_MCC 318 | ActivityInfo.CONFIG_MNC 319 | ActivityInfo.CONFIG_LOCALE 320 | ActivityInfo.CONFIG_LAYOUT_DIRECTION, mConfigDefault, config); 321 config.screenLayout = 1; 322 doConfigCompare(ActivityInfo.CONFIG_MCC 323 | ActivityInfo.CONFIG_MNC 324 | ActivityInfo.CONFIG_LOCALE 325 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 326 | ActivityInfo.CONFIG_SCREEN_LAYOUT, mConfigDefault, config); 327 config.touchscreen = 1; 328 doConfigCompare(ActivityInfo.CONFIG_MCC 329 | ActivityInfo.CONFIG_MNC 330 | ActivityInfo.CONFIG_LOCALE 331 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 332 | ActivityInfo.CONFIG_SCREEN_LAYOUT 333 | ActivityInfo.CONFIG_TOUCHSCREEN, mConfigDefault, config); 334 config.keyboard = 1; 335 doConfigCompare(ActivityInfo.CONFIG_MCC 336 | ActivityInfo.CONFIG_MNC 337 | ActivityInfo.CONFIG_LOCALE 338 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 339 | ActivityInfo.CONFIG_SCREEN_LAYOUT 340 | ActivityInfo.CONFIG_TOUCHSCREEN 341 | ActivityInfo.CONFIG_KEYBOARD, mConfigDefault, config); 342 config.keyboardHidden = 1; 343 doConfigCompare(ActivityInfo.CONFIG_MCC 344 | ActivityInfo.CONFIG_MNC 345 | ActivityInfo.CONFIG_LOCALE 346 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 347 | ActivityInfo.CONFIG_SCREEN_LAYOUT 348 | ActivityInfo.CONFIG_TOUCHSCREEN 349 | ActivityInfo.CONFIG_KEYBOARD 350 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN, mConfigDefault, config); 351 config.keyboardHidden = 0; 352 config.hardKeyboardHidden = 1; 353 doConfigCompare(ActivityInfo.CONFIG_MCC 354 | ActivityInfo.CONFIG_MNC 355 | ActivityInfo.CONFIG_LOCALE 356 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 357 | ActivityInfo.CONFIG_SCREEN_LAYOUT 358 | ActivityInfo.CONFIG_TOUCHSCREEN 359 | ActivityInfo.CONFIG_KEYBOARD 360 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN, mConfigDefault, config); 361 config.hardKeyboardHidden = 0; 362 config.navigationHidden = 1; 363 doConfigCompare(ActivityInfo.CONFIG_MCC 364 | ActivityInfo.CONFIG_MNC 365 | ActivityInfo.CONFIG_LOCALE 366 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 367 | ActivityInfo.CONFIG_SCREEN_LAYOUT 368 | ActivityInfo.CONFIG_TOUCHSCREEN 369 | ActivityInfo.CONFIG_KEYBOARD 370 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN, mConfigDefault, config); 371 config.navigation = 1; 372 doConfigCompare(ActivityInfo.CONFIG_MCC 373 | ActivityInfo.CONFIG_MNC 374 | ActivityInfo.CONFIG_LOCALE 375 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 376 | ActivityInfo.CONFIG_SCREEN_LAYOUT 377 | ActivityInfo.CONFIG_TOUCHSCREEN 378 | ActivityInfo.CONFIG_KEYBOARD 379 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 380 | ActivityInfo.CONFIG_NAVIGATION, mConfigDefault, config); 381 config.orientation = 1; 382 doConfigCompare(ActivityInfo.CONFIG_MCC 383 | ActivityInfo.CONFIG_MNC 384 | ActivityInfo.CONFIG_LOCALE 385 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 386 | ActivityInfo.CONFIG_SCREEN_LAYOUT 387 | ActivityInfo.CONFIG_TOUCHSCREEN 388 | ActivityInfo.CONFIG_KEYBOARD 389 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 390 | ActivityInfo.CONFIG_NAVIGATION 391 | ActivityInfo.CONFIG_ORIENTATION, mConfigDefault, config); 392 config.uiMode = 1; 393 doConfigCompare(ActivityInfo.CONFIG_MCC 394 | ActivityInfo.CONFIG_MNC 395 | ActivityInfo.CONFIG_LOCALE 396 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 397 | ActivityInfo.CONFIG_SCREEN_LAYOUT 398 | ActivityInfo.CONFIG_TOUCHSCREEN 399 | ActivityInfo.CONFIG_KEYBOARD 400 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 401 | ActivityInfo.CONFIG_NAVIGATION 402 | ActivityInfo.CONFIG_ORIENTATION 403 | ActivityInfo.CONFIG_UI_MODE, mConfigDefault, config); 404 config.fontScale = 2; 405 doConfigCompare(ActivityInfo.CONFIG_MCC 406 | ActivityInfo.CONFIG_MNC 407 | ActivityInfo.CONFIG_LOCALE 408 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 409 | ActivityInfo.CONFIG_SCREEN_LAYOUT 410 | ActivityInfo.CONFIG_TOUCHSCREEN 411 | ActivityInfo.CONFIG_KEYBOARD 412 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 413 | ActivityInfo.CONFIG_NAVIGATION 414 | ActivityInfo.CONFIG_ORIENTATION 415 | ActivityInfo.CONFIG_UI_MODE 416 | ActivityInfo.CONFIG_FONT_SCALE, mConfigDefault, config); 417 config.colorMode = 2; 418 doConfigCompare(ActivityInfo.CONFIG_MCC 419 | ActivityInfo.CONFIG_MNC 420 | ActivityInfo.CONFIG_LOCALE 421 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 422 | ActivityInfo.CONFIG_SCREEN_LAYOUT 423 | ActivityInfo.CONFIG_TOUCHSCREEN 424 | ActivityInfo.CONFIG_KEYBOARD 425 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 426 | ActivityInfo.CONFIG_NAVIGATION 427 | ActivityInfo.CONFIG_ORIENTATION 428 | ActivityInfo.CONFIG_UI_MODE 429 | ActivityInfo.CONFIG_FONT_SCALE 430 | ActivityInfo.CONFIG_COLOR_MODE, mConfigDefault, config); 431 config.fontWeightAdjustment = 300; 432 doConfigCompare(ActivityInfo.CONFIG_MCC 433 | ActivityInfo.CONFIG_MNC 434 | ActivityInfo.CONFIG_LOCALE 435 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 436 | ActivityInfo.CONFIG_SCREEN_LAYOUT 437 | ActivityInfo.CONFIG_TOUCHSCREEN 438 | ActivityInfo.CONFIG_KEYBOARD 439 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 440 | ActivityInfo.CONFIG_NAVIGATION 441 | ActivityInfo.CONFIG_ORIENTATION 442 | ActivityInfo.CONFIG_UI_MODE 443 | ActivityInfo.CONFIG_FONT_SCALE 444 | ActivityInfo.CONFIG_COLOR_MODE 445 | ActivityInfo.CONFIG_FONT_WEIGHT_ADJUSTMENT, mConfigDefault, config); 446 config.setGrammaticalGender(Configuration.GRAMMATICAL_GENDER_MASCULINE); 447 doConfigCompare(ActivityInfo.CONFIG_MCC 448 | ActivityInfo.CONFIG_MNC 449 | ActivityInfo.CONFIG_LOCALE 450 | ActivityInfo.CONFIG_LAYOUT_DIRECTION 451 | ActivityInfo.CONFIG_SCREEN_LAYOUT 452 | ActivityInfo.CONFIG_TOUCHSCREEN 453 | ActivityInfo.CONFIG_KEYBOARD 454 | ActivityInfo.CONFIG_KEYBOARD_HIDDEN 455 | ActivityInfo.CONFIG_NAVIGATION 456 | ActivityInfo.CONFIG_ORIENTATION 457 | ActivityInfo.CONFIG_UI_MODE 458 | ActivityInfo.CONFIG_FONT_SCALE 459 | ActivityInfo.CONFIG_COLOR_MODE 460 | ActivityInfo.CONFIG_FONT_WEIGHT_ADJUSTMENT 461 | ActivityInfo.CONFIG_GRAMMATICAL_GENDER, mConfigDefault, config); 462 } 463 464 @Test testEquals()465 public void testEquals() { 466 assertFalse(mConfigDefault.equals(mConfig)); 467 assertFalse(mConfigDefault.equals(new Object())); 468 } 469 470 @Test testHashCode()471 public void testHashCode() { 472 assertFalse(mConfigDefault.hashCode() == mConfig.hashCode()); 473 } 474 475 @Test testNeedNewResources()476 public void testNeedNewResources() { 477 assertTrue(Configuration.needNewResources(ActivityInfo.CONFIG_MCC, 478 ActivityInfo.CONFIG_MCC)); 479 assertFalse(Configuration.needNewResources(ActivityInfo.CONFIG_MNC, 480 ActivityInfo.CONFIG_MCC)); 481 assertTrue(Configuration.needNewResources( 482 ActivityInfo.CONFIG_MNC|ActivityInfo.CONFIG_FONT_SCALE, 483 ActivityInfo.CONFIG_MCC)); 484 } 485 486 @Test testSetToDefaults()487 public void testSetToDefaults() { 488 final Configuration config = new Configuration(mConfig); 489 assertFalse(config.equals(mConfigDefault)); 490 491 config.setToDefaults(); 492 assertTrue(config.equals(mConfigDefault)); 493 494 assertEquals(1.0f, config.fontScale); 495 assertEquals(0, config.mcc); 496 assertEquals(0, config.mnc); 497 assertTrue(config.getLocales().isEmpty()); 498 assertEquals(null, config.locale); 499 assertFalse(config.userSetLocale); 500 assertEquals(Configuration.TOUCHSCREEN_UNDEFINED, config.touchscreen); 501 assertEquals(Configuration.KEYBOARD_UNDEFINED, config.keyboard); 502 assertEquals(Configuration.KEYBOARDHIDDEN_UNDEFINED, config.keyboardHidden); 503 assertEquals(Configuration.HARDKEYBOARDHIDDEN_UNDEFINED, config.hardKeyboardHidden); 504 assertEquals(Configuration.NAVIGATION_UNDEFINED, config.navigation); 505 assertEquals(Configuration.NAVIGATIONHIDDEN_UNDEFINED, config.navigationHidden); 506 assertEquals(Configuration.ORIENTATION_UNDEFINED, config.orientation); 507 assertEquals(Configuration.SCREENLAYOUT_UNDEFINED, config.screenLayout); 508 assertEquals(Configuration.UI_MODE_TYPE_UNDEFINED, config.uiMode); 509 assertEquals(Configuration.SCREEN_WIDTH_DP_UNDEFINED, config.screenWidthDp); 510 assertEquals(Configuration.SCREEN_WIDTH_DP_UNDEFINED, config.compatScreenWidthDp); 511 assertEquals(Configuration.SCREEN_HEIGHT_DP_UNDEFINED, config.screenHeightDp); 512 assertEquals(Configuration.SCREEN_HEIGHT_DP_UNDEFINED, config.compatScreenHeightDp); 513 assertEquals(Configuration.SMALLEST_SCREEN_WIDTH_DP_UNDEFINED, 514 config.smallestScreenWidthDp); 515 assertEquals(Configuration.DENSITY_DPI_UNDEFINED, config.densityDpi); 516 assertEquals(Configuration.COLOR_MODE_UNDEFINED, config.colorMode); 517 assertEquals(Configuration.FONT_WEIGHT_ADJUSTMENT_UNDEFINED, config.fontWeightAdjustment); 518 assertEquals(Configuration.GRAMMATICAL_GENDER_NOT_SPECIFIED, config.getGrammaticalGender()); 519 } 520 521 @Test testUnset()522 public void testUnset() { 523 Configuration config = new Configuration(); 524 assertEquals(0.0f, config.fontScale); 525 assertEquals(0, config.mcc); 526 assertEquals(0, config.mnc); 527 assertTrue(config.getLocales().isEmpty()); 528 assertEquals(null, config.locale); 529 assertFalse(config.userSetLocale); 530 assertEquals(Configuration.TOUCHSCREEN_UNDEFINED, config.touchscreen); 531 assertEquals(Configuration.KEYBOARD_UNDEFINED, config.keyboard); 532 assertEquals(Configuration.KEYBOARDHIDDEN_UNDEFINED, config.keyboardHidden); 533 assertEquals(Configuration.HARDKEYBOARDHIDDEN_UNDEFINED, config.hardKeyboardHidden); 534 assertEquals(Configuration.NAVIGATION_UNDEFINED, config.navigation); 535 assertEquals(Configuration.NAVIGATIONHIDDEN_UNDEFINED, config.navigationHidden); 536 assertEquals(Configuration.ORIENTATION_UNDEFINED, config.orientation); 537 assertEquals(Configuration.SCREENLAYOUT_UNDEFINED, config.screenLayout); 538 assertEquals(Configuration.UI_MODE_TYPE_UNDEFINED, config.uiMode); 539 assertEquals(Configuration.SCREEN_WIDTH_DP_UNDEFINED, config.screenWidthDp); 540 assertEquals(Configuration.SCREEN_WIDTH_DP_UNDEFINED, config.compatScreenWidthDp); 541 assertEquals(Configuration.SCREEN_HEIGHT_DP_UNDEFINED, config.screenHeightDp); 542 assertEquals(Configuration.SCREEN_HEIGHT_DP_UNDEFINED, config.compatScreenHeightDp); 543 assertEquals(Configuration.SMALLEST_SCREEN_WIDTH_DP_UNDEFINED, 544 config.smallestScreenWidthDp); 545 assertEquals(Configuration.DENSITY_DPI_UNDEFINED, config.densityDpi); 546 assertEquals(Configuration.COLOR_MODE_UNDEFINED, config.colorMode); 547 assertEquals(Configuration.FONT_WEIGHT_ADJUSTMENT_UNDEFINED, config.fontWeightAdjustment); 548 assertEquals(Configuration.GRAMMATICAL_GENDER_NOT_SPECIFIED, config.getGrammaticalGender()); 549 } 550 551 @Test testToString()552 public void testToString() { 553 assertNotNull(mConfigDefault.toString()); 554 } 555 556 @Test testWriteToParcel()557 public void testWriteToParcel() { 558 assertWriteToParcel(createConfig((Locale) null)); 559 assertWriteToParcel(createConfig(new Locale(""))); 560 assertWriteToParcel(createConfig(Locale.JAPAN)); 561 assertWriteToParcel(createConfig(Locale.forLanguageTag("en-Shaw"))); 562 assertWriteToParcel(createConfig(LocaleList.forLanguageTags("fr,en-US"))); 563 } 564 565 @Test testSetLocale()566 public void testSetLocale() { 567 Configuration config = new Configuration(); 568 569 config.setLocale(null); 570 assertNull(config.locale); 571 assertTrue(config.getLocales().isEmpty()); 572 573 config.setLocale(Locale.getDefault()); 574 assertEquals(Locale.getDefault(), config.locale); 575 assertEquals(new LocaleList(Locale.getDefault()), config.getLocales()); 576 577 config.setLocale(Locale.ENGLISH); 578 assertEquals(Locale.ENGLISH, config.locale); 579 assertEquals(new LocaleList(Locale.ENGLISH), config.getLocales()); 580 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 581 582 config.setLocale(Locale.US); 583 assertEquals(Locale.US, config.locale); 584 assertEquals(new LocaleList(Locale.US), config.getLocales()); 585 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 586 587 final Locale arEGLocale = new Locale("ar", "EG"); 588 config.setLocale(arEGLocale); 589 assertEquals(arEGLocale, config.locale); 590 assertEquals(new LocaleList(arEGLocale), config.getLocales()); 591 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 592 593 final Locale faIRLocale = new Locale("fa", "IR"); 594 config.setLocale(faIRLocale); 595 assertEquals(faIRLocale, config.locale); 596 assertEquals(new LocaleList(faIRLocale), config.getLocales()); 597 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 598 599 final Locale iwILLocale = new Locale("iw", "IL"); 600 config.setLocale(iwILLocale); 601 assertEquals(iwILLocale, config.locale); 602 assertEquals(new LocaleList(iwILLocale), config.getLocales()); 603 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 604 605 final Locale urPKLocale = new Locale("ur", "PK"); 606 config.setLocale(urPKLocale); 607 assertEquals(urPKLocale, config.locale); 608 assertEquals(new LocaleList(urPKLocale), config.getLocales()); 609 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 610 } 611 612 @Test testSetGetLayoutDirection()613 public void testSetGetLayoutDirection() { 614 Configuration config = new Configuration(); 615 616 config.setLayoutDirection(Locale.ENGLISH); 617 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 618 619 config.setLayoutDirection(Locale.US); 620 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 621 622 final Locale arEGLocale = new Locale("ar", "EG"); 623 config.setLayoutDirection(arEGLocale); 624 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 625 626 final Locale faIRLocale = new Locale("fa", "IR"); 627 config.setLayoutDirection(faIRLocale); 628 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 629 630 final Locale iwILLocale = new Locale("iw", "IL"); 631 config.setLayoutDirection(iwILLocale); 632 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 633 634 final Locale urPKLocale = new Locale("ur", "PK"); 635 config.setLayoutDirection(urPKLocale); 636 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 637 } 638 639 @Test testIsScreenRound()640 public void testIsScreenRound() { 641 Configuration config = new Configuration(); 642 assertFalse(config.isScreenRound()); 643 644 config.screenLayout |= Configuration.SCREENLAYOUT_ROUND_YES; 645 assertTrue(config.isScreenRound()); 646 } 647 648 @Test testIsScreenHdr()649 public void testIsScreenHdr() { 650 Configuration config = new Configuration(); 651 assertFalse(config.isScreenHdr()); 652 653 config.colorMode |= Configuration.COLOR_MODE_HDR_YES; 654 assertTrue(config.isScreenHdr()); 655 } 656 657 @Test testIsScreenWideColorGamut()658 public void testIsScreenWideColorGamut() { 659 Configuration config = new Configuration(); 660 assertFalse(config.isScreenWideColorGamut()); 661 662 config.colorMode |= Configuration.COLOR_MODE_WIDE_COLOR_GAMUT_YES; 663 assertTrue(config.isScreenWideColorGamut()); 664 } 665 666 @Test testGrammaticalGender()667 public void testGrammaticalGender() { 668 var config = new Configuration(); 669 assertEquals(Configuration.GRAMMATICAL_GENDER_NOT_SPECIFIED, config.getGrammaticalGender()); 670 config.setGrammaticalGender(Configuration.GRAMMATICAL_GENDER_FEMININE); 671 assertEquals(Configuration.GRAMMATICAL_GENDER_FEMININE, config.getGrammaticalGender()); 672 } 673 674 @Test testFixUpLocaleList()675 public void testFixUpLocaleList() { 676 Configuration config = new Configuration(); 677 678 config.setLocales(LocaleList.forLanguageTags("fr")); 679 config.locale = null; 680 assertEquals(LocaleList.getEmptyLocaleList(), config.getLocales()); 681 682 config.setLocales(LocaleList.forLanguageTags("fr,en")); 683 config.locale = Locale.forLanguageTag("en"); 684 assertEquals(LocaleList.forLanguageTags("en"), config.getLocales()); 685 686 config.setLocales(LocaleList.forLanguageTags("fr,en")); 687 config.locale = Locale.forLanguageTag("fr"); 688 assertEquals(LocaleList.forLanguageTags("fr,en"), config.getLocales()); 689 } 690 691 @Test testSetTo_nullLocale()692 public void testSetTo_nullLocale() { 693 Configuration config1 = new Configuration(); 694 Configuration config2 = new Configuration(); 695 assertEquals(null, config2.locale); 696 697 config1.setLocale(Locale.FRENCH); 698 config1.setTo(config2); 699 assertEquals(null, config1.locale); 700 } 701 702 @Test testSetTo_localeFixUp()703 public void testSetTo_localeFixUp() { 704 Configuration config1 = new Configuration(); 705 Configuration config2 = new Configuration(); 706 config2.locale = Locale.FRENCH; 707 708 config1.setTo(config2); 709 assertEquals(Locale.FRENCH, config1.locale); 710 assertEquals(new LocaleList(Locale.FRENCH), config1.getLocales()); 711 assertEquals(new LocaleList(Locale.FRENCH), config2.getLocales()); 712 } 713 714 @Test testToString_localeFixUp()715 public void testToString_localeFixUp() { 716 Configuration config1 = new Configuration(); 717 Configuration config2 = new Configuration(); 718 config1.setLocales(LocaleList.forLanguageTags("fr,en")); 719 config1.locale = Locale.forLanguageTag("en"); 720 config2.setLocales(LocaleList.forLanguageTags("en")); 721 722 assertEquals(config1.toString(), config2.toString()); 723 } 724 725 @Test testUpdateFrom_localeFixUp()726 public void testUpdateFrom_localeFixUp() { 727 Configuration config1, config2; 728 int changed; 729 730 config1 = new Configuration(); 731 config2 = new Configuration(); 732 config1.locale = Locale.FRENCH; 733 changed = config1.updateFrom(config2); 734 assertEquals(0, changed); 735 assertEquals(Locale.FRENCH, config1.locale); 736 assertEquals(new LocaleList(Locale.FRENCH), config1.getLocales()); 737 738 config1 = new Configuration(); 739 config2 = new Configuration(); 740 config2.locale = Locale.FRENCH; 741 changed = config1.updateFrom(config2); 742 assertEquals(ActivityInfo.CONFIG_LOCALE | ActivityInfo.CONFIG_LAYOUT_DIRECTION, changed); 743 assertEquals(Locale.FRENCH, config1.locale); 744 assertEquals(new LocaleList(Locale.FRENCH), config1.getLocales()); 745 assertEquals(new LocaleList(Locale.FRENCH), config2.getLocales()); 746 747 config1 = new Configuration(); 748 config2 = new Configuration(); 749 config1.setLocales(LocaleList.forLanguageTags("en,fr")); 750 config1.locale = Locale.forLanguageTag("fr"); 751 config2.setLocales(LocaleList.forLanguageTags("en,de")); 752 config2.locale = Locale.forLanguageTag("fr"); 753 changed = config1.updateFrom(config2); 754 assertEquals(0, changed); 755 assertEquals(Locale.forLanguageTag("fr"), config1.locale); 756 assertEquals(LocaleList.forLanguageTags("fr"), config1.getLocales()); 757 assertEquals(LocaleList.forLanguageTags("fr"), config2.getLocales()); 758 } 759 760 @Test testUpdateFrom_layoutDirection()761 public void testUpdateFrom_layoutDirection() { 762 Configuration config1, config2; 763 int changed; 764 765 config1 = new Configuration(); 766 config2 = new Configuration(); 767 config1.setLocales(LocaleList.forLanguageTags("fr,en")); 768 config2.setLocales(LocaleList.forLanguageTags("de,en")); 769 changed = config1.updateFrom(config2); 770 assertTrue((changed & ActivityInfo.CONFIG_LAYOUT_DIRECTION) != 0); 771 772 config1 = new Configuration(); 773 config2 = new Configuration(); 774 config1.setLocales(LocaleList.forLanguageTags("fr,en")); 775 config2.setLocales(LocaleList.forLanguageTags("fr,de")); 776 changed = config1.updateFrom(config2); 777 assertEquals(0, changed & ActivityInfo.CONFIG_LAYOUT_DIRECTION); 778 } 779 780 @Test testDiff_localeFixUp()781 public void testDiff_localeFixUp() { 782 Configuration config1 = new Configuration(); 783 Configuration config2 = new Configuration(); 784 config1.setLocales(LocaleList.forLanguageTags("en,fr")); 785 config1.locale = Locale.forLanguageTag("fr"); 786 config2.setLocales(LocaleList.forLanguageTags("en,de")); 787 config2.locale = Locale.forLanguageTag("fr"); 788 789 int diff = config1.diff(config2); 790 assertEquals(0, diff); 791 } 792 793 @Test testCompareTo_localeFixUp()794 public void testCompareTo_localeFixUp() { 795 Configuration config1 = new Configuration(); 796 Configuration config2 = new Configuration(); 797 config1.setLocales(LocaleList.forLanguageTags("en,fr")); 798 config2.setLocales(LocaleList.forLanguageTags("en,fr")); 799 assertEquals(0, config1.compareTo(config2)); 800 config1.locale = new Locale("2"); 801 config2.locale = new Locale("3"); 802 assertEquals(-1, config1.compareTo(config2)); 803 } 804 805 @Test testSetLocales_null()806 public void testSetLocales_null() { 807 Configuration config = new Configuration(); 808 config.setLocales(null); 809 assertNull(config.locale); 810 assertNotNull(config.getLocales()); 811 assertTrue(config.getLocales().isEmpty()); 812 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 813 } 814 815 @Test testSetLocales_emptyList()816 public void testSetLocales_emptyList() { 817 Configuration config = new Configuration(); 818 config.setLocales(LocaleList.getEmptyLocaleList()); 819 assertNull(config.locale); 820 assertNotNull(config.getLocales()); 821 assertTrue(config.getLocales().isEmpty()); 822 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 823 } 824 825 @Test testSetLocales_oneLtr()826 public void testSetLocales_oneLtr() { 827 Configuration config = new Configuration(); 828 Locale loc = Locale.forLanguageTag("en"); 829 LocaleList ll = new LocaleList(loc); 830 config.setLocales(ll); 831 assertEquals(loc, config.locale); 832 assertEquals(ll, config.getLocales()); 833 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 834 } 835 836 @Test testSetLocales_oneRtl()837 public void testSetLocales_oneRtl() { 838 Configuration config = new Configuration(); 839 Locale loc = Locale.forLanguageTag("az-Arab"); 840 LocaleList ll = new LocaleList(loc); 841 config.setLocales(ll); 842 assertEquals(loc, config.locale); 843 assertEquals(ll, config.getLocales()); 844 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 845 } 846 847 @Test testSetLocales_twoLocales()848 public void testSetLocales_twoLocales() { 849 Configuration config = new Configuration(); 850 Locale rtlLoc = Locale.forLanguageTag("az-Arab"); 851 Locale ltrLoc = Locale.forLanguageTag("en"); 852 LocaleList ll = LocaleList.forLanguageTags("az-Arab,en"); 853 config.setLocales(ll); 854 assertEquals(rtlLoc, config.locale); 855 assertEquals(ll, config.getLocales()); 856 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 857 } 858 859 @Test testSetLocales_overridesLocale()860 public void testSetLocales_overridesLocale() { 861 Configuration config = new Configuration(); 862 config.locale = Locale.forLanguageTag("en"); 863 LocaleList ll = LocaleList.forLanguageTags("az-Arab,en"); 864 config.setLocales(ll); 865 866 assertEquals(Locale.forLanguageTag("az-Arab"), config.locale); 867 assertEquals(ll, config.getLocales()); 868 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 869 } 870 871 @Test testSetLocales_overridesSetLocale()872 public void testSetLocales_overridesSetLocale() { 873 Configuration config = new Configuration(); 874 config.setLocale(Locale.forLanguageTag("en")); 875 LocaleList ll = LocaleList.forLanguageTags("az-Arab,en"); 876 config.setLocales(ll); 877 878 assertEquals(Locale.forLanguageTag("az-Arab"), config.locale); 879 assertEquals(ll, config.getLocales()); 880 assertEquals(View.LAYOUT_DIRECTION_RTL, config.getLayoutDirection()); 881 } 882 883 @Test testSetLocale_overridesSetLocales()884 public void testSetLocale_overridesSetLocales() { 885 Configuration config = new Configuration(); 886 config.setLocales(LocaleList.forLanguageTags("az-Arab,en")); 887 config.setLocale(Locale.ENGLISH); 888 889 assertEquals(Locale.ENGLISH, config.locale); 890 assertEquals(new LocaleList(Locale.ENGLISH), config.getLocales()); 891 assertEquals(View.LAYOUT_DIRECTION_LTR, config.getLayoutDirection()); 892 } 893 createConfig(LocaleList list)894 private Configuration createConfig(LocaleList list) { 895 Configuration config = createConfig(); 896 config.setLocales(list); 897 return config; 898 } 899 createConfig(Locale locale)900 private Configuration createConfig(Locale locale) { 901 Configuration config = createConfig(); 902 config.locale = locale; 903 return config; 904 } 905 createConfig()906 private Configuration createConfig() { 907 Configuration config = new Configuration(); 908 config.fontScale = 13.37f; 909 config.mcc = 0; 910 config.mnc = 1; 911 config.touchscreen = Configuration.TOUCHSCREEN_STYLUS; 912 config.keyboard = Configuration.KEYBOARD_UNDEFINED; 913 config.keyboardHidden = Configuration.KEYBOARDHIDDEN_YES; 914 config.hardKeyboardHidden = Configuration.KEYBOARDHIDDEN_UNDEFINED; 915 config.navigation = Configuration.NAVIGATION_DPAD; 916 config.navigationHidden = Configuration.NAVIGATIONHIDDEN_UNDEFINED; 917 config.orientation = Configuration.ORIENTATION_PORTRAIT; 918 config.screenLayout = Configuration.SCREENLAYOUT_LONG_UNDEFINED; 919 return config; 920 } 921 assertWriteToParcel(Configuration config)922 private void assertWriteToParcel(Configuration config) { 923 final Parcel parcel = Parcel.obtain(); 924 try { 925 config.writeToParcel(parcel, 0); 926 parcel.setDataPosition(0); 927 Configuration readConf = new Configuration(); 928 readConf.readFromParcel(parcel); 929 assertEquals(config, readConf); 930 } finally { 931 parcel.recycle(); 932 } 933 } 934 } 935