Home | History | Annotate | Download | only in cts
      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