Home | History | Annotate | Download | only in android
      1 /*
      2  * Copyright (C) 2010 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 /**
     18  * @addtogroup Configuration
     19  * @{
     20  */
     21 
     22 /**
     23  * @file configuration.h
     24  */
     25 
     26 #ifndef ANDROID_CONFIGURATION_H
     27 #define ANDROID_CONFIGURATION_H
     28 
     29 #include <sys/cdefs.h>
     30 
     31 #include <android/asset_manager.h>
     32 
     33 #if !defined(__INTRODUCED_IN)
     34 #define __INTRODUCED_IN(__api_level) /* nothing */
     35 #endif
     36 
     37 #ifdef __cplusplus
     38 extern "C" {
     39 #endif
     40 
     41 struct AConfiguration;
     42 /**
     43  * {@link AConfiguration} is an opaque type used to get and set
     44  * various subsystem configurations.
     45  *
     46  * A {@link AConfiguration} pointer can be obtained using:
     47  * - AConfiguration_new()
     48  * - AConfiguration_fromAssetManager()
     49  */
     50 typedef struct AConfiguration AConfiguration;
     51 
     52 
     53 /**
     54  * Define flags and constants for various subsystem configurations.
     55  */
     56 enum {
     57     /** Orientation: not specified. */
     58     ACONFIGURATION_ORIENTATION_ANY  = 0x0000,
     59     /**
     60      * Orientation: value corresponding to the
     61      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#OrientationQualifier">port</a>
     62      * resource qualifier.
     63      */
     64     ACONFIGURATION_ORIENTATION_PORT = 0x0001,
     65     /**
     66      * Orientation: value corresponding to the
     67      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#OrientationQualifier">land</a>
     68      * resource qualifier.
     69      */
     70     ACONFIGURATION_ORIENTATION_LAND = 0x0002,
     71     /** @deprecated Not currently supported or used. */
     72     ACONFIGURATION_ORIENTATION_SQUARE = 0x0003,
     73 
     74     /** Touchscreen: not specified. */
     75     ACONFIGURATION_TOUCHSCREEN_ANY  = 0x0000,
     76     /**
     77      * Touchscreen: value corresponding to the
     78      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#TouchscreenQualifier">notouch</a>
     79      * resource qualifier.
     80      */
     81     ACONFIGURATION_TOUCHSCREEN_NOTOUCH  = 0x0001,
     82     /** @deprecated Not currently supported or used. */
     83     ACONFIGURATION_TOUCHSCREEN_STYLUS  = 0x0002,
     84     /**
     85      * Touchscreen: value corresponding to the
     86      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#TouchscreenQualifier">finger</a>
     87      * resource qualifier.
     88      */
     89     ACONFIGURATION_TOUCHSCREEN_FINGER  = 0x0003,
     90 
     91     /** Density: default density. */
     92     ACONFIGURATION_DENSITY_DEFAULT = 0,
     93     /**
     94      * Density: value corresponding to the
     95      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">ldpi</a>
     96      * resource qualifier.
     97      */
     98     ACONFIGURATION_DENSITY_LOW = 120,
     99     /**
    100      * Density: value corresponding to the
    101      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">mdpi</a>
    102      * resource qualifier.
    103      */
    104     ACONFIGURATION_DENSITY_MEDIUM = 160,
    105     /**
    106      * Density: value corresponding to the
    107      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">tvdpi</a>
    108      * resource qualifier.
    109      */
    110     ACONFIGURATION_DENSITY_TV = 213,
    111     /**
    112      * Density: value corresponding to the
    113      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">hdpi</a>
    114      * resource qualifier.
    115      */
    116     ACONFIGURATION_DENSITY_HIGH = 240,
    117     /**
    118      * Density: value corresponding to the
    119      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">xhdpi</a>
    120      * resource qualifier.
    121      */
    122     ACONFIGURATION_DENSITY_XHIGH = 320,
    123     /**
    124      * Density: value corresponding to the
    125      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">xxhdpi</a>
    126      * resource qualifier.
    127      */
    128     ACONFIGURATION_DENSITY_XXHIGH = 480,
    129     /**
    130      * Density: value corresponding to the
    131      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">xxxhdpi</a>
    132      * resource qualifier.
    133      */
    134     ACONFIGURATION_DENSITY_XXXHIGH = 640,
    135     /** Density: any density. */
    136     ACONFIGURATION_DENSITY_ANY = 0xfffe,
    137     /** Density: no density specified. */
    138     ACONFIGURATION_DENSITY_NONE = 0xffff,
    139 
    140     /** Keyboard: not specified. */
    141     ACONFIGURATION_KEYBOARD_ANY  = 0x0000,
    142     /**
    143      * Keyboard: value corresponding to the
    144      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#ImeQualifier">nokeys</a>
    145      * resource qualifier.
    146      */
    147     ACONFIGURATION_KEYBOARD_NOKEYS  = 0x0001,
    148     /**
    149      * Keyboard: value corresponding to the
    150      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#ImeQualifier">qwerty</a>
    151      * resource qualifier.
    152      */
    153     ACONFIGURATION_KEYBOARD_QWERTY  = 0x0002,
    154     /**
    155      * Keyboard: value corresponding to the
    156      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#ImeQualifier">12key</a>
    157      * resource qualifier.
    158      */
    159     ACONFIGURATION_KEYBOARD_12KEY  = 0x0003,
    160 
    161     /** Navigation: not specified. */
    162     ACONFIGURATION_NAVIGATION_ANY  = 0x0000,
    163     /**
    164      * Navigation: value corresponding to the
    165      * <a href="@@dacRoot/guide/topics/resources/providing-resources.html#NavigationQualifier">nonav</a>
    166      * resource qualifier.
    167      */
    168     ACONFIGURATION_NAVIGATION_NONAV  = 0x0001,
    169     /**
    170      * Navigation: value corresponding to the
    171      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavigationQualifier">dpad</a>
    172      * resource qualifier.
    173      */
    174     ACONFIGURATION_NAVIGATION_DPAD  = 0x0002,
    175     /**
    176      * Navigation: value corresponding to the
    177      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavigationQualifier">trackball</a>
    178      * resource qualifier.
    179      */
    180     ACONFIGURATION_NAVIGATION_TRACKBALL  = 0x0003,
    181     /**
    182      * Navigation: value corresponding to the
    183      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavigationQualifier">wheel</a>
    184      * resource qualifier.
    185      */
    186     ACONFIGURATION_NAVIGATION_WHEEL  = 0x0004,
    187 
    188     /** Keyboard availability: not specified. */
    189     ACONFIGURATION_KEYSHIDDEN_ANY = 0x0000,
    190     /**
    191      * Keyboard availability: value corresponding to the
    192      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#KeyboardAvailQualifier">keysexposed</a>
    193      * resource qualifier.
    194      */
    195     ACONFIGURATION_KEYSHIDDEN_NO = 0x0001,
    196     /**
    197      * Keyboard availability: value corresponding to the
    198      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#KeyboardAvailQualifier">keyshidden</a>
    199      * resource qualifier.
    200      */
    201     ACONFIGURATION_KEYSHIDDEN_YES = 0x0002,
    202     /**
    203      * Keyboard availability: value corresponding to the
    204      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#KeyboardAvailQualifier">keyssoft</a>
    205      * resource qualifier.
    206      */
    207     ACONFIGURATION_KEYSHIDDEN_SOFT = 0x0003,
    208 
    209     /** Navigation availability: not specified. */
    210     ACONFIGURATION_NAVHIDDEN_ANY = 0x0000,
    211     /**
    212      * Navigation availability: value corresponding to the
    213      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavAvailQualifier">navexposed</a>
    214      * resource qualifier.
    215      */
    216     ACONFIGURATION_NAVHIDDEN_NO = 0x0001,
    217     /**
    218      * Navigation availability: value corresponding to the
    219      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavAvailQualifier">navhidden</a>
    220      * resource qualifier.
    221      */
    222     ACONFIGURATION_NAVHIDDEN_YES = 0x0002,
    223 
    224     /** Screen size: not specified. */
    225     ACONFIGURATION_SCREENSIZE_ANY  = 0x00,
    226     /**
    227      * Screen size: value indicating the screen is at least
    228      * approximately 320x426 dp units, corresponding to the
    229      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenSizeQualifier">small</a>
    230      * resource qualifier.
    231      */
    232     ACONFIGURATION_SCREENSIZE_SMALL = 0x01,
    233     /**
    234      * Screen size: value indicating the screen is at least
    235      * approximately 320x470 dp units, corresponding to the
    236      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenSizeQualifier">normal</a>
    237      * resource qualifier.
    238      */
    239     ACONFIGURATION_SCREENSIZE_NORMAL = 0x02,
    240     /**
    241      * Screen size: value indicating the screen is at least
    242      * approximately 480x640 dp units, corresponding to the
    243      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenSizeQualifier">large</a>
    244      * resource qualifier.
    245      */
    246     ACONFIGURATION_SCREENSIZE_LARGE = 0x03,
    247     /**
    248      * Screen size: value indicating the screen is at least
    249      * approximately 720x960 dp units, corresponding to the
    250      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenSizeQualifier">xlarge</a>
    251      * resource qualifier.
    252      */
    253     ACONFIGURATION_SCREENSIZE_XLARGE = 0x04,
    254 
    255     /** Screen layout: not specified. */
    256     ACONFIGURATION_SCREENLONG_ANY = 0x00,
    257     /**
    258      * Screen layout: value that corresponds to the
    259      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenAspectQualifier">notlong</a>
    260      * resource qualifier.
    261      */
    262     ACONFIGURATION_SCREENLONG_NO = 0x1,
    263     /**
    264      * Screen layout: value that corresponds to the
    265      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenAspectQualifier">long</a>
    266      * resource qualifier.
    267      */
    268     ACONFIGURATION_SCREENLONG_YES = 0x2,
    269 
    270     ACONFIGURATION_SCREENROUND_ANY = 0x00,
    271     ACONFIGURATION_SCREENROUND_NO = 0x1,
    272     ACONFIGURATION_SCREENROUND_YES = 0x2,
    273 
    274     /** Wide color gamut: not specified. */
    275     ACONFIGURATION_WIDE_COLOR_GAMUT_ANY = 0x00,
    276     /**
    277      * Wide color gamut: value that corresponds to
    278      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#WideColorGamutQualifier">no
    279      * nowidecg</a> resource qualifier specified.
    280      */
    281     ACONFIGURATION_WIDE_COLOR_GAMUT_NO = 0x1,
    282     /**
    283      * Wide color gamut: value that corresponds to
    284      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#WideColorGamutQualifier">
    285      * widecg</a> resource qualifier specified.
    286      */
    287     ACONFIGURATION_WIDE_COLOR_GAMUT_YES = 0x2,
    288 
    289     /** HDR: not specified. */
    290     ACONFIGURATION_HDR_ANY = 0x00,
    291     /**
    292      * HDR: value that corresponds to
    293      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#HDRQualifier">
    294      * lowdr</a> resource qualifier specified.
    295      */
    296     ACONFIGURATION_HDR_NO = 0x1,
    297     /**
    298      * HDR: value that corresponds to
    299      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#HDRQualifier">
    300      * highdr</a> resource qualifier specified.
    301      */
    302     ACONFIGURATION_HDR_YES = 0x2,
    303 
    304     /** UI mode: not specified. */
    305     ACONFIGURATION_UI_MODE_TYPE_ANY = 0x00,
    306     /**
    307      * UI mode: value that corresponds to
    308      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">no
    309      * UI mode type</a> resource qualifier specified.
    310      */
    311     ACONFIGURATION_UI_MODE_TYPE_NORMAL = 0x01,
    312     /**
    313      * UI mode: value that corresponds to
    314      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">desk</a> resource qualifier specified.
    315      */
    316     ACONFIGURATION_UI_MODE_TYPE_DESK = 0x02,
    317     /**
    318      * UI mode: value that corresponds to
    319      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">car</a> resource qualifier specified.
    320      */
    321     ACONFIGURATION_UI_MODE_TYPE_CAR = 0x03,
    322     /**
    323      * UI mode: value that corresponds to
    324      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">television</a> resource qualifier specified.
    325      */
    326     ACONFIGURATION_UI_MODE_TYPE_TELEVISION = 0x04,
    327     /**
    328      * UI mode: value that corresponds to
    329      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">appliance</a> resource qualifier specified.
    330      */
    331     ACONFIGURATION_UI_MODE_TYPE_APPLIANCE = 0x05,
    332     /**
    333      * UI mode: value that corresponds to
    334      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">watch</a> resource qualifier specified.
    335      */
    336     ACONFIGURATION_UI_MODE_TYPE_WATCH = 0x06,
    337     /**
    338      * UI mode: value that corresponds to
    339      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">vr</a> resource qualifier specified.
    340      */
    341     ACONFIGURATION_UI_MODE_TYPE_VR_HEADSET = 0x07,
    342 
    343     /** UI night mode: not specified.*/
    344     ACONFIGURATION_UI_MODE_NIGHT_ANY = 0x00,
    345     /**
    346      * UI night mode: value that corresponds to
    347      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#NightQualifier">notnight</a> resource qualifier specified.
    348      */
    349     ACONFIGURATION_UI_MODE_NIGHT_NO = 0x1,
    350     /**
    351      * UI night mode: value that corresponds to
    352      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#NightQualifier">night</a> resource qualifier specified.
    353      */
    354     ACONFIGURATION_UI_MODE_NIGHT_YES = 0x2,
    355 
    356     /** Screen width DPI: not specified. */
    357     ACONFIGURATION_SCREEN_WIDTH_DP_ANY = 0x0000,
    358 
    359     /** Screen height DPI: not specified. */
    360     ACONFIGURATION_SCREEN_HEIGHT_DP_ANY = 0x0000,
    361 
    362     /** Smallest screen width DPI: not specified.*/
    363     ACONFIGURATION_SMALLEST_SCREEN_WIDTH_DP_ANY = 0x0000,
    364 
    365     /** Layout direction: not specified. */
    366     ACONFIGURATION_LAYOUTDIR_ANY  = 0x00,
    367     /**
    368      * Layout direction: value that corresponds to
    369      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#LayoutDirectionQualifier">ldltr</a> resource qualifier specified.
    370      */
    371     ACONFIGURATION_LAYOUTDIR_LTR  = 0x01,
    372     /**
    373      * Layout direction: value that corresponds to
    374      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#LayoutDirectionQualifier">ldrtl</a> resource qualifier specified.
    375      */
    376     ACONFIGURATION_LAYOUTDIR_RTL  = 0x02,
    377 
    378     /**
    379      * Bit mask for
    380      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#MccQualifier">mcc</a>
    381      * configuration.
    382      */
    383     ACONFIGURATION_MCC = 0x0001,
    384     /**
    385      * Bit mask for
    386      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#MccQualifier">mnc</a>
    387      * configuration.
    388      */
    389     ACONFIGURATION_MNC = 0x0002,
    390     /**
    391      * Bit mask for
    392      * <a href="{@docRoot}guide/topics/resources/providing-resources.html#LocaleQualifier">locale</a>
    393      * configuration.
    394      */
    395     ACONFIGURATION_LOCALE = 0x0004,
    396     /**
    397      * Bit mask for
    398      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#TouchscreenQualifier">touchscreen</a>
    399      * configuration.
    400      */
    401     ACONFIGURATION_TOUCHSCREEN = 0x0008,
    402     /**
    403      * Bit mask for
    404      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#ImeQualifier">keyboard</a>
    405      * configuration.
    406      */
    407     ACONFIGURATION_KEYBOARD = 0x0010,
    408     /**
    409      * Bit mask for
    410      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#KeyboardAvailQualifier">keyboardHidden</a>
    411      * configuration.
    412      */
    413     ACONFIGURATION_KEYBOARD_HIDDEN = 0x0020,
    414     /**
    415      * Bit mask for
    416      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavigationQualifier">navigation</a>
    417      * configuration.
    418      */
    419     ACONFIGURATION_NAVIGATION = 0x0040,
    420     /**
    421      * Bit mask for
    422      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#OrientationQualifier">orientation</a>
    423      * configuration.
    424      */
    425     ACONFIGURATION_ORIENTATION = 0x0080,
    426     /**
    427      * Bit mask for
    428      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">density</a>
    429      * configuration.
    430      */
    431     ACONFIGURATION_DENSITY = 0x0100,
    432     /**
    433      * Bit mask for
    434      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenSizeQualifier">screen size</a>
    435      * configuration.
    436      */
    437     ACONFIGURATION_SCREEN_SIZE = 0x0200,
    438     /**
    439      * Bit mask for
    440      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#VersionQualifier">platform version</a>
    441      * configuration.
    442      */
    443     ACONFIGURATION_VERSION = 0x0400,
    444     /**
    445      * Bit mask for screen layout configuration.
    446      */
    447     ACONFIGURATION_SCREEN_LAYOUT = 0x0800,
    448     /**
    449      * Bit mask for
    450      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">ui mode</a>
    451      * configuration.
    452      */
    453     ACONFIGURATION_UI_MODE = 0x1000,
    454     /**
    455      * Bit mask for
    456      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#SmallestScreenWidthQualifier">smallest screen width</a>
    457      * configuration.
    458      */
    459     ACONFIGURATION_SMALLEST_SCREEN_SIZE = 0x2000,
    460     /**
    461      * Bit mask for
    462      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#LayoutDirectionQualifier">layout direction</a>
    463      * configuration.
    464      */
    465     ACONFIGURATION_LAYOUTDIR = 0x4000,
    466     ACONFIGURATION_SCREEN_ROUND = 0x8000,
    467     /**
    468      * Bit mask for
    469      * <a href="@dacRoot/guide/topics/resources/providing-resources.html#WideColorGamutQualifier">wide color gamut</a>
    470      * and <a href="@dacRoot/guide/topics/resources/providing-resources.html#HDRQualifier">HDR</a> configurations.
    471      */
    472     ACONFIGURATION_COLOR_MODE = 0x10000,
    473     /**
    474      * Constant used to to represent MNC (Mobile Network Code) zero.
    475      * 0 cannot be used, since it is used to represent an undefined MNC.
    476      */
    477     ACONFIGURATION_MNC_ZERO = 0xffff,
    478 };
    479 
    480 /**
    481  * Create a new AConfiguration, initialized with no values set.
    482  */
    483 AConfiguration* AConfiguration_new();
    484 
    485 /**
    486  * Free an AConfiguration that was previously created with
    487  * AConfiguration_new().
    488  */
    489 void AConfiguration_delete(AConfiguration* config);
    490 
    491 /**
    492  * Create and return a new AConfiguration based on the current configuration in
    493  * use in the given {@link AAssetManager}.
    494  */
    495 void AConfiguration_fromAssetManager(AConfiguration* out, AAssetManager* am);
    496 
    497 /**
    498  * Copy the contents of 'src' to 'dest'.
    499  */
    500 void AConfiguration_copy(AConfiguration* dest, AConfiguration* src);
    501 
    502 /**
    503  * Return the current MCC set in the configuration.  0 if not set.
    504  */
    505 int32_t AConfiguration_getMcc(AConfiguration* config);
    506 
    507 /**
    508  * Set the current MCC in the configuration.  0 to clear.
    509  */
    510 void AConfiguration_setMcc(AConfiguration* config, int32_t mcc);
    511 
    512 /**
    513  * Return the current MNC set in the configuration.  0 if not set.
    514  */
    515 int32_t AConfiguration_getMnc(AConfiguration* config);
    516 
    517 /**
    518  * Set the current MNC in the configuration.  0 to clear.
    519  */
    520 void AConfiguration_setMnc(AConfiguration* config, int32_t mnc);
    521 
    522 /**
    523  * Return the current language code set in the configuration.  The output will
    524  * be filled with an array of two characters.  They are not 0-terminated.  If
    525  * a language is not set, they will be 0.
    526  */
    527 void AConfiguration_getLanguage(AConfiguration* config, char* outLanguage);
    528 
    529 /**
    530  * Set the current language code in the configuration, from the first two
    531  * characters in the string.
    532  */
    533 void AConfiguration_setLanguage(AConfiguration* config, const char* language);
    534 
    535 /**
    536  * Return the current country code set in the configuration.  The output will
    537  * be filled with an array of two characters.  They are not 0-terminated.  If
    538  * a country is not set, they will be 0.
    539  */
    540 void AConfiguration_getCountry(AConfiguration* config, char* outCountry);
    541 
    542 /**
    543  * Set the current country code in the configuration, from the first two
    544  * characters in the string.
    545  */
    546 void AConfiguration_setCountry(AConfiguration* config, const char* country);
    547 
    548 /**
    549  * Return the current ACONFIGURATION_ORIENTATION_* set in the configuration.
    550  */
    551 int32_t AConfiguration_getOrientation(AConfiguration* config);
    552 
    553 /**
    554  * Set the current orientation in the configuration.
    555  */
    556 void AConfiguration_setOrientation(AConfiguration* config, int32_t orientation);
    557 
    558 /**
    559  * Return the current ACONFIGURATION_TOUCHSCREEN_* set in the configuration.
    560  */
    561 int32_t AConfiguration_getTouchscreen(AConfiguration* config);
    562 
    563 /**
    564  * Set the current touchscreen in the configuration.
    565  */
    566 void AConfiguration_setTouchscreen(AConfiguration* config, int32_t touchscreen);
    567 
    568 /**
    569  * Return the current ACONFIGURATION_DENSITY_* set in the configuration.
    570  */
    571 int32_t AConfiguration_getDensity(AConfiguration* config);
    572 
    573 /**
    574  * Set the current density in the configuration.
    575  */
    576 void AConfiguration_setDensity(AConfiguration* config, int32_t density);
    577 
    578 /**
    579  * Return the current ACONFIGURATION_KEYBOARD_* set in the configuration.
    580  */
    581 int32_t AConfiguration_getKeyboard(AConfiguration* config);
    582 
    583 /**
    584  * Set the current keyboard in the configuration.
    585  */
    586 void AConfiguration_setKeyboard(AConfiguration* config, int32_t keyboard);
    587 
    588 /**
    589  * Return the current ACONFIGURATION_NAVIGATION_* set in the configuration.
    590  */
    591 int32_t AConfiguration_getNavigation(AConfiguration* config);
    592 
    593 /**
    594  * Set the current navigation in the configuration.
    595  */
    596 void AConfiguration_setNavigation(AConfiguration* config, int32_t navigation);
    597 
    598 /**
    599  * Return the current ACONFIGURATION_KEYSHIDDEN_* set in the configuration.
    600  */
    601 int32_t AConfiguration_getKeysHidden(AConfiguration* config);
    602 
    603 /**
    604  * Set the current keys hidden in the configuration.
    605  */
    606 void AConfiguration_setKeysHidden(AConfiguration* config, int32_t keysHidden);
    607 
    608 /**
    609  * Return the current ACONFIGURATION_NAVHIDDEN_* set in the configuration.
    610  */
    611 int32_t AConfiguration_getNavHidden(AConfiguration* config);
    612 
    613 /**
    614  * Set the current nav hidden in the configuration.
    615  */
    616 void AConfiguration_setNavHidden(AConfiguration* config, int32_t navHidden);
    617 
    618 /**
    619  * Return the current SDK (API) version set in the configuration.
    620  */
    621 int32_t AConfiguration_getSdkVersion(AConfiguration* config);
    622 
    623 /**
    624  * Set the current SDK version in the configuration.
    625  */
    626 void AConfiguration_setSdkVersion(AConfiguration* config, int32_t sdkVersion);
    627 
    628 /**
    629  * Return the current ACONFIGURATION_SCREENSIZE_* set in the configuration.
    630  */
    631 int32_t AConfiguration_getScreenSize(AConfiguration* config);
    632 
    633 /**
    634  * Set the current screen size in the configuration.
    635  */
    636 void AConfiguration_setScreenSize(AConfiguration* config, int32_t screenSize);
    637 
    638 /**
    639  * Return the current ACONFIGURATION_SCREENLONG_* set in the configuration.
    640  */
    641 int32_t AConfiguration_getScreenLong(AConfiguration* config);
    642 
    643 /**
    644  * Set the current screen long in the configuration.
    645  */
    646 void AConfiguration_setScreenLong(AConfiguration* config, int32_t screenLong);
    647 
    648 /**
    649  * Return the current ACONFIGURATION_SCREENROUND_* set in the configuration.
    650  */
    651 int32_t AConfiguration_getScreenRound(AConfiguration* config);
    652 
    653 /**
    654  * Set the current screen round in the configuration.
    655  */
    656 void AConfiguration_setScreenRound(AConfiguration* config, int32_t screenRound);
    657 
    658 /**
    659  * Return the current ACONFIGURATION_UI_MODE_TYPE_* set in the configuration.
    660  */
    661 int32_t AConfiguration_getUiModeType(AConfiguration* config);
    662 
    663 /**
    664  * Set the current UI mode type in the configuration.
    665  */
    666 void AConfiguration_setUiModeType(AConfiguration* config, int32_t uiModeType);
    667 
    668 /**
    669  * Return the current ACONFIGURATION_UI_MODE_NIGHT_* set in the configuration.
    670  */
    671 int32_t AConfiguration_getUiModeNight(AConfiguration* config);
    672 
    673 /**
    674  * Set the current UI mode night in the configuration.
    675  */
    676 void AConfiguration_setUiModeNight(AConfiguration* config, int32_t uiModeNight);
    677 
    678 #if __ANDROID_API__ >= 13
    679 /**
    680  * Return the current configuration screen width in dp units, or
    681  * ACONFIGURATION_SCREEN_WIDTH_DP_ANY if not set.
    682  */
    683 int32_t AConfiguration_getScreenWidthDp(AConfiguration* config) __INTRODUCED_IN(13);
    684 
    685 /**
    686  * Set the configuration's current screen width in dp units.
    687  */
    688 void AConfiguration_setScreenWidthDp(AConfiguration* config, int32_t value) __INTRODUCED_IN(13);
    689 
    690 /**
    691  * Return the current configuration screen height in dp units, or
    692  * ACONFIGURATION_SCREEN_HEIGHT_DP_ANY if not set.
    693  */
    694 int32_t AConfiguration_getScreenHeightDp(AConfiguration* config) __INTRODUCED_IN(13);
    695 
    696 /**
    697  * Set the configuration's current screen width in dp units.
    698  */
    699 void AConfiguration_setScreenHeightDp(AConfiguration* config, int32_t value) __INTRODUCED_IN(13);
    700 
    701 /**
    702  * Return the configuration's smallest screen width in dp units, or
    703  * ACONFIGURATION_SMALLEST_SCREEN_WIDTH_DP_ANY if not set.
    704  */
    705 int32_t AConfiguration_getSmallestScreenWidthDp(AConfiguration* config) __INTRODUCED_IN(13);
    706 
    707 /**
    708  * Set the configuration's smallest screen width in dp units.
    709  */
    710 void AConfiguration_setSmallestScreenWidthDp(AConfiguration* config, int32_t value) __INTRODUCED_IN(13);
    711 #endif /* __ANDROID_API__ >= 13 */
    712 
    713 #if __ANDROID_API__ >= 17
    714 /**
    715  * Return the configuration's layout direction, or
    716  * ACONFIGURATION_LAYOUTDIR_ANY if not set.
    717  */
    718 int32_t AConfiguration_getLayoutDirection(AConfiguration* config) __INTRODUCED_IN(17);
    719 
    720 /**
    721  * Set the configuration's layout direction.
    722  */
    723 void AConfiguration_setLayoutDirection(AConfiguration* config, int32_t value) __INTRODUCED_IN(17);
    724 #endif /* __ANDROID_API__ >= 17 */
    725 
    726 /**
    727  * Perform a diff between two configurations.  Returns a bit mask of
    728  * ACONFIGURATION_* constants, each bit set meaning that configuration element
    729  * is different between them.
    730  */
    731 int32_t AConfiguration_diff(AConfiguration* config1, AConfiguration* config2);
    732 
    733 /**
    734  * Determine whether 'base' is a valid configuration for use within the
    735  * environment 'requested'.  Returns 0 if there are any values in 'base'
    736  * that conflict with 'requested'.  Returns 1 if it does not conflict.
    737  */
    738 int32_t AConfiguration_match(AConfiguration* base, AConfiguration* requested);
    739 
    740 /**
    741  * Determine whether the configuration in 'test' is better than the existing
    742  * configuration in 'base'.  If 'requested' is non-NULL, this decision is based
    743  * on the overall configuration given there.  If it is NULL, this decision is
    744  * simply based on which configuration is more specific.  Returns non-0 if
    745  * 'test' is better than 'base'.
    746  *
    747  * This assumes you have already filtered the configurations with
    748  * AConfiguration_match().
    749  */
    750 int32_t AConfiguration_isBetterThan(AConfiguration* base, AConfiguration* test,
    751         AConfiguration* requested);
    752 
    753 #ifdef __cplusplus
    754 };
    755 #endif
    756 
    757 #endif // ANDROID_CONFIGURATION_H
    758 
    759 /** @} */
    760