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 #ifndef ANDROID_CONFIGURATION_H
     18 #define ANDROID_CONFIGURATION_H
     19 
     20 #include <android/asset_manager.h>
     21 
     22 #ifdef __cplusplus
     23 extern "C" {
     24 #endif
     25 
     26 struct AConfiguration;
     27 typedef struct AConfiguration AConfiguration;
     28 
     29 enum {
     30     ACONFIGURATION_ORIENTATION_ANY  = 0x0000,
     31     ACONFIGURATION_ORIENTATION_PORT = 0x0001,
     32     ACONFIGURATION_ORIENTATION_LAND = 0x0002,
     33     ACONFIGURATION_ORIENTATION_SQUARE = 0x0003,
     34 
     35     ACONFIGURATION_TOUCHSCREEN_ANY  = 0x0000,
     36     ACONFIGURATION_TOUCHSCREEN_NOTOUCH  = 0x0001,
     37     ACONFIGURATION_TOUCHSCREEN_STYLUS  = 0x0002,
     38     ACONFIGURATION_TOUCHSCREEN_FINGER  = 0x0003,
     39 
     40     ACONFIGURATION_DENSITY_DEFAULT = 0,
     41     ACONFIGURATION_DENSITY_LOW = 120,
     42     ACONFIGURATION_DENSITY_MEDIUM = 160,
     43     ACONFIGURATION_DENSITY_TV = 213,
     44     ACONFIGURATION_DENSITY_HIGH = 240,
     45     ACONFIGURATION_DENSITY_NONE = 0xffff,
     46 
     47     ACONFIGURATION_KEYBOARD_ANY  = 0x0000,
     48     ACONFIGURATION_KEYBOARD_NOKEYS  = 0x0001,
     49     ACONFIGURATION_KEYBOARD_QWERTY  = 0x0002,
     50     ACONFIGURATION_KEYBOARD_12KEY  = 0x0003,
     51 
     52     ACONFIGURATION_NAVIGATION_ANY  = 0x0000,
     53     ACONFIGURATION_NAVIGATION_NONAV  = 0x0001,
     54     ACONFIGURATION_NAVIGATION_DPAD  = 0x0002,
     55     ACONFIGURATION_NAVIGATION_TRACKBALL  = 0x0003,
     56     ACONFIGURATION_NAVIGATION_WHEEL  = 0x0004,
     57 
     58     ACONFIGURATION_KEYSHIDDEN_ANY = 0x0000,
     59     ACONFIGURATION_KEYSHIDDEN_NO = 0x0001,
     60     ACONFIGURATION_KEYSHIDDEN_YES = 0x0002,
     61     ACONFIGURATION_KEYSHIDDEN_SOFT = 0x0003,
     62 
     63     ACONFIGURATION_NAVHIDDEN_ANY = 0x0000,
     64     ACONFIGURATION_NAVHIDDEN_NO = 0x0001,
     65     ACONFIGURATION_NAVHIDDEN_YES = 0x0002,
     66 
     67     ACONFIGURATION_SCREENSIZE_ANY  = 0x00,
     68     ACONFIGURATION_SCREENSIZE_SMALL = 0x01,
     69     ACONFIGURATION_SCREENSIZE_NORMAL = 0x02,
     70     ACONFIGURATION_SCREENSIZE_LARGE = 0x03,
     71     ACONFIGURATION_SCREENSIZE_XLARGE = 0x04,
     72 
     73     ACONFIGURATION_SCREENLONG_ANY = 0x00,
     74     ACONFIGURATION_SCREENLONG_NO = 0x1,
     75     ACONFIGURATION_SCREENLONG_YES = 0x2,
     76 
     77     ACONFIGURATION_UI_MODE_TYPE_ANY = 0x00,
     78     ACONFIGURATION_UI_MODE_TYPE_NORMAL = 0x01,
     79     ACONFIGURATION_UI_MODE_TYPE_DESK = 0x02,
     80     ACONFIGURATION_UI_MODE_TYPE_CAR = 0x03,
     81     ACONFIGURATION_UI_MODE_TYPE_TELEVISION = 0x04,
     82 
     83     ACONFIGURATION_UI_MODE_NIGHT_ANY = 0x00,
     84     ACONFIGURATION_UI_MODE_NIGHT_NO = 0x1,
     85     ACONFIGURATION_UI_MODE_NIGHT_YES = 0x2,
     86 
     87     ACONFIGURATION_SCREEN_WIDTH_DP_ANY = 0x0000,
     88 
     89     ACONFIGURATION_SCREEN_HEIGHT_DP_ANY = 0x0000,
     90 
     91     ACONFIGURATION_SMALLEST_SCREEN_WIDTH_DP_ANY = 0x0000,
     92 
     93     ACONFIGURATION_MCC = 0x0001,
     94     ACONFIGURATION_MNC = 0x0002,
     95     ACONFIGURATION_LOCALE = 0x0004,
     96     ACONFIGURATION_TOUCHSCREEN = 0x0008,
     97     ACONFIGURATION_KEYBOARD = 0x0010,
     98     ACONFIGURATION_KEYBOARD_HIDDEN = 0x0020,
     99     ACONFIGURATION_NAVIGATION = 0x0040,
    100     ACONFIGURATION_ORIENTATION = 0x0080,
    101     ACONFIGURATION_DENSITY = 0x0100,
    102     ACONFIGURATION_SCREEN_SIZE = 0x0200,
    103     ACONFIGURATION_VERSION = 0x0400,
    104     ACONFIGURATION_SCREEN_LAYOUT = 0x0800,
    105     ACONFIGURATION_UI_MODE = 0x1000,
    106     ACONFIGURATION_SMALLEST_SCREEN_SIZE = 0x2000,
    107 };
    108 
    109 /**
    110  * Create a new AConfiguration, initialized with no values set.
    111  */
    112 AConfiguration* AConfiguration_new();
    113 
    114 /**
    115  * Free an AConfiguration that was previously created with
    116  * AConfiguration_new().
    117  */
    118 void AConfiguration_delete(AConfiguration* config);
    119 
    120 /**
    121  * Create and return a new AConfiguration based on the current configuration in
    122  * use in the given AssetManager.
    123  */
    124 void AConfiguration_fromAssetManager(AConfiguration* out, AAssetManager* am);
    125 
    126 /**
    127  * Copy the contents of 'src' to 'dest'.
    128  */
    129 void AConfiguration_copy(AConfiguration* dest, AConfiguration* src);
    130 
    131 /**
    132  * Return the current MCC set in the configuration.  0 if not set.
    133  */
    134 int32_t AConfiguration_getMcc(AConfiguration* config);
    135 
    136 /**
    137  * Set the current MCC in the configuration.  0 to clear.
    138  */
    139 void AConfiguration_setMcc(AConfiguration* config, int32_t mcc);
    140 
    141 /**
    142  * Return the current MNC set in the configuration.  0 if not set.
    143  */
    144 int32_t AConfiguration_getMnc(AConfiguration* config);
    145 
    146 /**
    147  * Set the current MNC in the configuration.  0 to clear.
    148  */
    149 void AConfiguration_setMnc(AConfiguration* config, int32_t mnc);
    150 
    151 /**
    152  * Return the current language code set in the configuration.  The output will
    153  * be filled with an array of two characters.  They are not 0-terminated.  If
    154  * a language is not set, they will be 0.
    155  */
    156 void AConfiguration_getLanguage(AConfiguration* config, char* outLanguage);
    157 
    158 /**
    159  * Set the current language code in the configuration, from the first two
    160  * characters in the string.
    161  */
    162 void AConfiguration_setLanguage(AConfiguration* config, const char* language);
    163 
    164 /**
    165  * Return the current country code set in the configuration.  The output will
    166  * be filled with an array of two characters.  They are not 0-terminated.  If
    167  * a country is not set, they will be 0.
    168  */
    169 void AConfiguration_getCountry(AConfiguration* config, char* outCountry);
    170 
    171 /**
    172  * Set the current country code in the configuration, from the first two
    173  * characters in the string.
    174  */
    175 void AConfiguration_setCountry(AConfiguration* config, const char* country);
    176 
    177 /**
    178  * Return the current ACONFIGURATION_ORIENTATION_* set in the configuration.
    179  */
    180 int32_t AConfiguration_getOrientation(AConfiguration* config);
    181 
    182 /**
    183  * Set the current orientation in the configuration.
    184  */
    185 void AConfiguration_setOrientation(AConfiguration* config, int32_t orientation);
    186 
    187 /**
    188  * Return the current ACONFIGURATION_TOUCHSCREEN_* set in the configuration.
    189  */
    190 int32_t AConfiguration_getTouchscreen(AConfiguration* config);
    191 
    192 /**
    193  * Set the current touchscreen in the configuration.
    194  */
    195 void AConfiguration_setTouchscreen(AConfiguration* config, int32_t touchscreen);
    196 
    197 /**
    198  * Return the current ACONFIGURATION_DENSITY_* set in the configuration.
    199  */
    200 int32_t AConfiguration_getDensity(AConfiguration* config);
    201 
    202 /**
    203  * Set the current density in the configuration.
    204  */
    205 void AConfiguration_setDensity(AConfiguration* config, int32_t density);
    206 
    207 /**
    208  * Return the current ACONFIGURATION_KEYBOARD_* set in the configuration.
    209  */
    210 int32_t AConfiguration_getKeyboard(AConfiguration* config);
    211 
    212 /**
    213  * Set the current keyboard in the configuration.
    214  */
    215 void AConfiguration_setKeyboard(AConfiguration* config, int32_t keyboard);
    216 
    217 /**
    218  * Return the current ACONFIGURATION_NAVIGATION_* set in the configuration.
    219  */
    220 int32_t AConfiguration_getNavigation(AConfiguration* config);
    221 
    222 /**
    223  * Set the current navigation in the configuration.
    224  */
    225 void AConfiguration_setNavigation(AConfiguration* config, int32_t navigation);
    226 
    227 /**
    228  * Return the current ACONFIGURATION_KEYSHIDDEN_* set in the configuration.
    229  */
    230 int32_t AConfiguration_getKeysHidden(AConfiguration* config);
    231 
    232 /**
    233  * Set the current keys hidden in the configuration.
    234  */
    235 void AConfiguration_setKeysHidden(AConfiguration* config, int32_t keysHidden);
    236 
    237 /**
    238  * Return the current ACONFIGURATION_NAVHIDDEN_* set in the configuration.
    239  */
    240 int32_t AConfiguration_getNavHidden(AConfiguration* config);
    241 
    242 /**
    243  * Set the current nav hidden in the configuration.
    244  */
    245 void AConfiguration_setNavHidden(AConfiguration* config, int32_t navHidden);
    246 
    247 /**
    248  * Return the current SDK (API) version set in the configuration.
    249  */
    250 int32_t AConfiguration_getSdkVersion(AConfiguration* config);
    251 
    252 /**
    253  * Set the current SDK version in the configuration.
    254  */
    255 void AConfiguration_setSdkVersion(AConfiguration* config, int32_t sdkVersion);
    256 
    257 /**
    258  * Return the current ACONFIGURATION_SCREENSIZE_* set in the configuration.
    259  */
    260 int32_t AConfiguration_getScreenSize(AConfiguration* config);
    261 
    262 /**
    263  * Set the current screen size in the configuration.
    264  */
    265 void AConfiguration_setScreenSize(AConfiguration* config, int32_t screenSize);
    266 
    267 /**
    268  * Return the current ACONFIGURATION_SCREENLONG_* set in the configuration.
    269  */
    270 int32_t AConfiguration_getScreenLong(AConfiguration* config);
    271 
    272 /**
    273  * Set the current screen long in the configuration.
    274  */
    275 void AConfiguration_setScreenLong(AConfiguration* config, int32_t screenLong);
    276 
    277 /**
    278  * Return the current ACONFIGURATION_UI_MODE_TYPE_* set in the configuration.
    279  */
    280 int32_t AConfiguration_getUiModeType(AConfiguration* config);
    281 
    282 /**
    283  * Set the current UI mode type in the configuration.
    284  */
    285 void AConfiguration_setUiModeType(AConfiguration* config, int32_t uiModeType);
    286 
    287 /**
    288  * Return the current ACONFIGURATION_UI_MODE_NIGHT_* set in the configuration.
    289  */
    290 int32_t AConfiguration_getUiModeNight(AConfiguration* config);
    291 
    292 /**
    293  * Set the current UI mode night in the configuration.
    294  */
    295 void AConfiguration_setUiModeNight(AConfiguration* config, int32_t uiModeNight);
    296 
    297 /**
    298  * Return the current configuration screen width in dp units, or
    299  * ACONFIGURATION_SCREEN_WIDTH_DP_ANY if not set.
    300  */
    301 int32_t AConfiguration_getScreenWidthDp(AConfiguration* config);
    302 
    303 /**
    304  * Set the configuration's current screen width in dp units.
    305  */
    306 void AConfiguration_setScreenWidthDp(AConfiguration* config, int32_t value);
    307 
    308 /**
    309  * Return the current configuration screen height in dp units, or
    310  * ACONFIGURATION_SCREEN_HEIGHT_DP_ANY if not set.
    311  */
    312 int32_t AConfiguration_getScreenHeightDp(AConfiguration* config);
    313 
    314 /**
    315  * Set the configuration's current screen width in dp units.
    316  */
    317 void AConfiguration_setScreenHeightDp(AConfiguration* config, int32_t value);
    318 
    319 /**
    320  * Return the configuration's smallest screen width in dp units, or
    321  * ACONFIGURATION_SMALLEST_SCREEN_WIDTH_DP_ANY if not set.
    322  */
    323 int32_t AConfiguration_getSmallestScreenWidthDp(AConfiguration* config);
    324 
    325 /**
    326  * Set the configuration's smallest screen width in dp units.
    327  */
    328 void AConfiguration_setSmallestScreenWidthDp(AConfiguration* config, int32_t value);
    329 
    330 /**
    331  * Perform a diff between two configurations.  Returns a bit mask of
    332  * ACONFIGURATION_* constants, each bit set meaning that configuration element
    333  * is different between them.
    334  */
    335 int32_t AConfiguration_diff(AConfiguration* config1, AConfiguration* config2);
    336 
    337 /**
    338  * Determine whether 'base' is a valid configuration for use within the
    339  * environment 'requested'.  Returns 0 if there are any values in 'base'
    340  * that conflict with 'requested'.  Returns 1 if it does not conflict.
    341  */
    342 int32_t AConfiguration_match(AConfiguration* base, AConfiguration* requested);
    343 
    344 /**
    345  * Determine whether the configuration in 'test' is better than the existing
    346  * configuration in 'base'.  If 'requested' is non-NULL, this decision is based
    347  * on the overall configuration given there.  If it is NULL, this decision is
    348  * simply based on which configuration is more specific.  Returns non-0 if
    349  * 'test' is better than 'base'.
    350  *
    351  * This assumes you have already filtered the configurations with
    352  * AConfiguration_match().
    353  */
    354 int32_t AConfiguration_isBetterThan(AConfiguration* base, AConfiguration* test,
    355         AConfiguration* requested);
    356 
    357 #ifdef __cplusplus
    358 };
    359 #endif
    360 
    361 #endif // ANDROID_CONFIGURATION_H
    362